//---------------------------------------------------------------------------
// TOKENS declaration
//---------------------------------------------------------------------------
|
<DEFAULT> TOKEN : {
<NUMBER_LITERAL: ("-")? (".")? ["0"-"9"] (["0"-"9","a"-"f","A"-"F","x",".","+","-"])*>
| <STRING_LITERAL: "\"" (~["\"","\\"] | "\\" (["n","t","b","r","f","\\","\'","\""] | ["0"-"7"] (["0"-"7"])? | ["0"-"3"] ["0"-"7"] ["0"-"7"]))* "\"">
}
|
<DEFAULT> TOKEN : {
<LBRACKET: "[">
| <RBRACKET: "]">
}
|
<DEFAULT> TOKEN : {
<TRUE: "TRUE">
| <FALSE: "FALSE">
}
|
<*> SKIP : {
" "
| "\t"
| "\n"
| "\r"
| "\f"
| ","
}
|
<*> SPECIAL : {
<COMMENT: "#" (~["\n","\r"])* ("\n" | "\r" | "\r\n")>
}
|
/**
* This does not use the other methods to do the field parsing. Instead, it
* goes on the raw values that are presented and returns objects to represent
* that. We look for either single values or multiple values. For any of these
* we return a representative object. The return value could be one of these:
*
* - Boolean
*
- Integer
*
- Float
*
- String
*
- boolean[]
*
- int[]
*
- float[]
*
- String[]
*
*
* @param useInt A hint to use if this is a number field we are parsing to
* decide whether to parse number strings as an int or float for type
* checking. If expecting any other sort of field, has no effect.
*/
|
parseUnknownField |
::= |
( <TRUE> | <FALSE> | <NUMBER_LITERAL> | <STRING_LITERAL> | ( <LBRACKET> )? ( ( <TRUE> | <FALSE> )+ | ( <NUMBER_LITERAL> )+ | ( <STRING_LITERAL> )+ ) ( <RBRACKET> )? ( <EOF> )? ) |
/**
* Parse an SFInt value. If there is more than one int value in the string it
* will be ignored.
*/
|
SFInt32 |
::= |
<NUMBER_LITERAL> ( <EOF> )? |
/**
* Parse an MFInt32 value.
*
* MFInt32 ::=
* "[" NUMBER_LITERAL* "]" |
* NUMBER_LITERAL*
*
*/
|
MFInt32 |
::= |
( <LBRACKET> )? ( <NUMBER_LITERAL> )* ( <RBRACKET> )? ( <EOF> )? |
/**
* Parse an SFFloat value. If there is more than one float value in the string
* it will be ignored.
*/
|
SFFloat |
::= |
<NUMBER_LITERAL> ( <EOF> )? |
/**
* Parse an MFFloat value.
*
* MFInt32 ::=
* "[" NUMBER_LITERAL* "]" |
* NUMBER_LITERAL*
*
*/
|
MFFloat |
::= |
( <LBRACKET> )? ( <NUMBER_LITERAL> )* ( <RBRACKET> )? ( <EOF> )? |
/**
* Parse an SFBool value. If there is more than one boolean value in the string
* it will be ignored.
*/
|
SFBool |
::= |
( <TRUE> | <FALSE> ) ( <EOF> )? |
/**
* Parse an MFBool value.
*
* MFBool ::=
* "[" ("TRUE" | "FALSE")* "]" |
* ("TRUE" | "FALSE")*
*
*/
|
MFBool |
::= |
( <LBRACKET> )? ( <TRUE> | <FALSE> )* ( <RBRACKET> )? ( <EOF> )? |
/**
* Parse an SFString value. We really shouldn't need this, but it is here for
* completeness.
*/
|
SFString |
::= |
<STRING_LITERAL> ( <EOF> )? |
/**
* Parse an MFString value.
*
* MFString ::=
* "[" ( STRING_LITERAL)* "]" |
* (STRING_LITERAL)*
*
*/
|
MFString |
::= |
( <LBRACKET> )? ( <STRING_LITERAL> )* ( <RBRACKET> )? ( <EOF> )? |
/**
* Parse an SFVec2f value. If there is more than one float value in the string
* it will be ignored.
*/
|
SFVec2f |
::= |
<NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )? |
/**
* Parse an MFVec2f value.
*
* MFVec2f ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL)*
*
*/
|
MFVec2f |
::= |
( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )? |
/**
* Parse an SFVec3f value. If there is more than one float value in the string
* it will be ignored.
*/
|
SFVec3f |
::= |
<NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )? |
/**
* Parse an MFVec3f value.
*
* MFVec3f ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
*
*/
|
MFVec3f |
::= |
( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )? |
/**
* Parse an SFRotation value. If there is more than one float value in the string
* it will be ignored.
*/
|
SFRotation |
::= |
<NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )? |
/**
* Parse an MFRotation value.
*
* MFRotation ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
*
*/
|
MFRotation |
::= |
( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )? |
/**
* Parse an SFTime value. If there is more than one float value in the string
* it will be ignored.
*/
|
SFTime |
::= |
<NUMBER_LITERAL> ( <EOF> )? |
/**
* Parse an MFTime value. In VRML97 MFTime are not legal field types. However,
* we provide it here for completeness and that it might be used by VRML 3.0.
*
* MFTime ::=
* "[" NUMBER_LITERAL* "]" |
* NUMBER_LITERAL*
*
*/
|
MFTime |
::= |
( <LBRACKET> )? ( <NUMBER_LITERAL> )* ( <RBRACKET> )? ( <EOF> )? |
/**
* Parse an SFColor value. If there is more than one float value in the string
* it will be ignored.
*/
|
SFColor |
::= |
<NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )? |
/**
* Parse an MFColor value. The color differs from the float value by being
* clamped between 0 and 1.
*
* MFColor ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
*
*/
|
MFColor |
::= |
( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )? |
/**
* Parse an SFImage value.
*
* SFImage ::=
* NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL (NUMBER_LITERAL)*
*
*/
|
SFImage |
::= |
<NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <NUMBER_LITERAL> )* ( <EOF> )? |