The Virtual Reality Modeling Language Specification
Appendix A. Grammar Definition
Version 2.0, ISO/IEC 14772
August 4, 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.
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.
-
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
-
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.
-
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
This URL: http://vrml.sgi.com/moving-worlds/spec/part1/grammar.html