The Virtual Reality Modeling Language Specification

A. Grammar Definition

Version 2.0, Official Draft #3, ISO/IEC 14772

July 15, 1996

This section provides a detailed description of the grammar for each node in VRML 2.0. There are four sections: Introduction, General, Nodes, and Fields.

A.1 Introduction

VRML grammar is ambiguous; semantic knowledge of the names and types of fields, eventIns, and eventOuts for each node type (either builtIn or user-defined using PROTO or EXTERNROTO) must be used during parsing so that the parser knows which field type is being parsed.

The '#' (0x23) character begins a comment wherever it appears outside of quoted SFString or MFString fields. The '#' character and all characters until the next carriage-return or newline make up the comment and are treated as whitespace.

The carriage return (0x0d), newline (0x0a), space (0x20), tab (0x09), and comma (0x2c) characters are whitespace characters wherever they appear outside of quoted SFString or MFString fields. Any number of whitespace characters and comments may be used to separate the syntactic entities of a VRML file.

Please see the Nodes Reference section of the Moving Worlds specification for a description of the allowed fields, eventIns and eventOuts for all pre-defined node types. Also note that some of the basic types that will typically be handled by a lexical analyzer (sffloatValue, sftimeValue, sfint32Value, and sfstringValue) have not been formally specified; please see the Fields Reference section of the spec for a more complete description of their syntax.

A.2 General

vrmlScene:
declarations
declarations:
declaration
declaration declarations
declaration:
nodeDeclaration
protoDeclaration
routeDeclaration
NULL
nodeDeclaration:
node
DEF nodeNameId node
USE nodeNameId
protoDeclaration:
proto
externproto
proto:
PROTO nodeTypeId [ interface_declarations ] { vrmlScene }
interfaceDeclarations:
interfaceDeclaration
interfaceDeclaration interfaceDeclarations
restrictedInterfaceDeclaration:
eventIn fieldType eventInId
eventOut fieldType eventOutId
field fieldType fieldId fieldValue
interfaceDeclaration:
restrictedInterfaceDeclaration
exposedField fieldType fieldId fieldValue
externproto:
EXTERNPROTO nodeTypeId [ externInterfaceDeclarations ] mfstringValue
externInterfaceDeclarations:
externInterfaceDeclaration
externInterfaceDeclaration externInterfaceDeclarations
externInterfaceDeclaration:
eventIn fieldType eventInId
eventOut fieldType eventOutId
field fieldType fieldId
exposedField fieldType fieldId
routeDeclaration:
ROUTE nodeNameId . eventOutId TO nodeNameId . eventInId

A.3 Nodes

node:
nodeTypeId { nodeGuts }
Script { scriptGuts }
nodeGuts:
nodeGut
nodeGut nodeGuts
scriptGuts:
scriptGut
scriptGut scriptGuts
scriptGut:
nodeGut
restrictedInterfaceDeclaration
eventIn fieldType eventInId IS eventInId
eventOut fieldType eventOutId IS eventOutId
field fieldType fieldId IS fieldId
nodeGut:
fieldId fieldValue
fieldId IS fieldId
eventInId IS eventInId
eventOutId IS eventOutId
routeDeclaration
protoDeclaration
nodeNameId:
Id
nodeTypeId:
Id
fieldId:
Id
eventInId:
Id
eventOutId:
Id
Id:
IdFirstChar
IdFirstChar IdRestChars
IdFirstChar:
Any ISO-10646 character encoded using UTF-8 except: 0x30-0x39, 0x0-0x20, 0x22, 0x23, 0x27, 0x2c, 0x2e, 0x5b, 0x5c, 0x5d, 0x7b, 0x7d.
IdRestChars:
Any number of ISO-10646 characters except: 0x0-0x20, 0x22, 0x23, 0x27, 0x2c, 0x2e, 0x5b, 0x5c, 0x5d, 0x7b, 0x7d.

A.4 Fields

fieldType:
MFColor
MFFloat
MFInt32
MFNode
MFRotation
MFString
MFVec2f
MFVec3f
SFBool
SFColor
SFFloat
SFImage
SFInt32
SFNode
SFRotation
SFString
SFTime
SFVec2f
SFVec3f
fieldValue:
sfboolValue
sfcolorValue
sffloatValue
sfimageValue
sfint32Value
sfnodeValue
sfrotationValue
sfstringValue
sftimeValue
sfvec2fValue
sfvec3fValue
mfcolorValue
mffloatValue
mfint32Value
mfnodeValue
mfrotationValue
mfstringValue
mfvec2fValue
mfvec3fValue
sfboolValue:
TRUE
FALSE
sfcolorValue:
float float float
sffloatValue:
... floating point number in ANSI C floating point format...
sfimageValue:
int32 int32 int32 int32s...
sfint32Value:
[0-9]+
0x[0-9A-F]+
sfnodeValue:
nodeDeclaration
NULL
sfrotationValue:
float float float float
sfstringValue:
".*" ... double-quotes must be \", backslashes must be \\...
sftimeValue:
... double-precision number in ANSI C floating point format...
sfvec2fValue:
float float
sfvec3fValue:
float float float
mfcolorValue:
sfcolorValue
[ ]
[ sfcolorValues ]
sfcolorValues:
sfcolorValue
sfcolorValue sfcolorValues
mffloatValue:
sffloatValue
[ ]
[ sffloatValues ]
sffloatValues:
sffloatValue
sffloatValue sffloatValues
mfint32Value:
sfint32Value
[ ]
[ sfint32Values ]
sfint32Values:
sfint32Value
sfint32Value sfint32Values
mfnodeValue:
nodeDeclaration
[ ]
[ nodeDeclarations ]
nodeDeclarations:
nodeDeclaration
nodeDeclaration nodeDeclarations
mfrotationValue:
sfrotationValue
[ ]
[ sfrotationValues ]
sfrotationValues:
sfrotationValue
sfrotationValue sfrotationValues
mfstringValue:
sfstringValue
[ ]
[ sfstringValues ]
sfstringValues:
sfstringValue
sfstringValue sfstringValues
mfvec2fValue:
sfvec2fValue
[ ]
[ sfvec2fValues]
sfvec2fValues:
sfvec2fValue
sfvec2fValue sfvec2fValues
mfvec3fValue:
sfvec3fValue
[ ]
[ sfvec3fValues ]
sfvec3fValues:
sfvec3fValue
sfvec3fValue sfvec3fValues

 Contact rikk@best.com, cmarrin@sgi.com, or gavin@acm.org with questions or comments.
This URL: http://vrml.sgi.com/moving-worlds/spec/part1/grammar.html