<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE>BNF for X3DFieldParser.jj</TITLE>
</HEAD>
<BODY>
<H1 ALIGN=CENTER>BNF for X3DFieldParser.jj</H1>
<H2 ALIGN=CENTER>TOKENS</H2>
<TABLE>
<!-- Special token -->
<TR>
<TD>
<PRE>
//---------------------------------------------------------------------------
// TOKENS declaration
//---------------------------------------------------------------------------
</PRE>
</TD>
</TR>
<!-- Token -->
<TR>
<TD>
<PRE>
<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"]))* "\"">
}
</PRE>
</TD>
</TR>
<!-- Token -->
<TR>
<TD>
<PRE>
<DEFAULT> TOKEN : {
<LBRACKET: "[">
| <RBRACKET: "]">
}
</PRE>
</TD>
</TR>
<!-- Token -->
<TR>
<TD>
<PRE>
<DEFAULT> TOKEN : {
<TRUE: "TRUE">
| <FALSE: "FALSE">
| <TRUE_L: "true">
| <FALSE_L: "false">
}
</PRE>
</TD>
</TR>
<!-- Token -->
<TR>
<TD>
<PRE>
<*> SKIP : {
" "
| "\t"
| "\n"
| "\r"
| "\f"
| ","
}
</PRE>
</TD>
</TR>
<!-- Token -->
<TR>
<TD>
<PRE>
<*> SPECIAL : {
<COMMENT: "#" (~["\n","\r"])* ("\n" | "\r" | "\r\n")>
}
</PRE>
</TD>
</TR>
</TABLE>
<H2 ALIGN=CENTER>NON-TERMINALS</H2>
<TABLE>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* 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:
* <ul>
* <li>Boolean
* <li>Integer
* <li>Long
* <li>Float
* <li>String
* <li>boolean[]
* <li>int[]
* <li>long[]
* <li>float[]
* <li>String[]
* </ul>
*
* @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.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod1">parseUnknownField</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <TRUE> | <TRUE_L> | <FALSE> | <FALSE_L> | <NUMBER_LITERAL> | <STRING_LITERAL> | ( <LBRACKET> )? ( ( <TRUE> | <FALSE> )+ | ( <NUMBER_LITERAL> )+ | ( <STRING_LITERAL> )+ ) ( <RBRACKET> )? ( <EOF> )? )</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFInt value. If there is more than one int value in the string it
* will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod2">SFInt32</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFInt32 value.
* <pre>
* MFInt32 ::=
* "[" NUMBER_LITERAL* "]" |
* NUMBER_LITERAL*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod3">MFInt32</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> )* ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFLong value. If there is more than one long value in the string it
* will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod4">SFLong</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFLong value.
* <pre>
* MFLong ::=
* "[" NUMBER_LITERAL* "]" |
* NUMBER_LITERAL*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod5">MFLong</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> )* ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFFloat value. If there is more than one float value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod6">SFFloat</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFFloat value.
* <pre>
* MFFloat ::=
* "[" NUMBER_LITERAL* "]" |
* NUMBER_LITERAL*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod7">MFFloat</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> )* ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFDouble value. If there is more than one double value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod8">SFDouble</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFDouble value.
* <pre>
* MFDouble ::=
* "[" NUMBER_LITERAL* "]" |
* NUMBER_LITERAL*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod9">MFDouble</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> )* ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFBool value. If there is more than one boolean value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod10">SFBool</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <TRUE> | <FALSE> ) ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFBool value using lower case lettering, for XML field values. If
* there is more than one boolean value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod11">SFBoolLower</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <TRUE_L> | <FALSE_L> | <TRUE> | <FALSE> ) ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFBool value.
* <pre>
* MFBool ::=
* "[" ("TRUE" | "FALSE")* "]" |
* ("TRUE" | "FALSE")*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod12">MFBool</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <TRUE> | <FALSE> )* ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFBool that is in lower case for XML parsing.
* <pre>
* MFBool ::=
* "[" ("true" | "false")* "]" |
* ("true" | "false")*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod13">MFBoolLower</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <TRUE_L> | <FALSE_L> | <TRUE> | <FALSE> )* ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFString value. We really shouldn't need this, but it is here for
* completeness.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod14">SFString</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><STRING_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFString value.
* <pre>
* MFString ::=
* "[" ( STRING_LITERAL)* "]" |
* (STRING_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod15">MFString</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <STRING_LITERAL> )* ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFVec2f value. If there is more than one float value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod16">SFVec2f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFVec2f value.
* <pre>
* MFVec2f ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod17">MFVec2f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFVec3f value. If there is more than one float value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod18">SFVec3f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFVec3f value.
* <pre>
* MFVec3f ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod19">MFVec3f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFVec2d value. If there is more than one double value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod20">SFVec2d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFVec2d value.
* <pre>
* MFVec2d ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod21">MFVec2d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFVec3d value. If there is more than one double value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod22">SFVec3d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFVec3d value.
* <pre>
* MFVec3d ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod23">MFVec3d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFVec4f value. If there is more than one float value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod24">SFVec4f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFVec4f value.
* <pre>
* MFVec4f ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod25">MFVec4f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFVec4d value. If there is more than one double value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod26">SFVec4d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFVec4d value.
* <pre>
* MFVec4d ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod27">MFVec4d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFRotation value. If there is more than one float value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod28">SFRotation</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFRotation value.
* <pre>
* MFRotation ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod29">MFRotation</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFTime value. If there is more than one float value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod30">SFTime</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* 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.
* <pre>
* MFTime ::=
* "[" NUMBER_LITERAL* "]" |
* NUMBER_LITERAL*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod31">MFTime</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> )* ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFColor value. The color differs from the float value by being
* clamped between 0 and 1. Any more than a single colour value is ignored.
* <pre>
* SFColor ::=
* NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod32">SFColor</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFColor value. The color differs from the float value by being
* clamped between 0 and 1.
* <pre>
* MFColor ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod33">MFColor</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFImage value.
* <pre>
* SFImage ::=
* NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL (NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod34">SFImage</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <NUMBER_LITERAL> )* ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFImage value.
* <pre>
* MFImage ::=
* NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL (NUMBER_LITERAL)*
* </pre>
* Since we really don't have any control over the number of integers
* here we just assume a single image and then parse the rest of the
* integers as quickly as possible.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod35">MFImage</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <NUMBER_LITERAL> )* ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFColorRGBA value. If there is more than one float value in the string
* it will be ignored.
* <pre>
* SFColorRGBA ::=
* NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod36">SFColorRGBA</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFColorRGBA value. The color differs from the float value by being
* clamped between 0 and 1.
* <pre>
* MFColor ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod37">MFColorRGBA</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFMatrix3f value. If there is more than one float value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod38">SFMatrix3f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFMatrix3f value.
* <pre>
* MFMatrix3f ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod39">MFMatrix3f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFMatrix3d value. If there is more than one double value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod40">SFMatrix3d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFMatrix3d value.
* <pre>
* MFMatrix4d ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod41">MFMatrix3d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFMatrix4f value. If there is more than one float value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod42">SFMatrix4f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFMatrix4f value.
* <pre>
* MFMatrix4f ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod43">MFMatrix4f</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an SFMatrix4d value. If there is more than one double value in the string
* it will be ignored.
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod44">SFMatrix4d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE><NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> ( <EOF> )?</TD>
</TR>
<!-- Special token -->
<TR>
<TD>
<PRE>
/**
* Parse an MFMatrix4d value.
* <pre>
* MFMatrix4d ::=
* "[" (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)* "]" |
* (NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL NUMBER_LITERAL)*
* </pre>
*/</PRE>
</TD>
</TR>
<TR>
<TD ALIGN=RIGHT VALIGN=BASELINE><A NAME="prod45">MFMatrix4d</A></TD>
<TD ALIGN=CENTER VALIGN=BASELINE>::=</TD>
<TD ALIGN=LEFT VALIGN=BASELINE>( <LBRACKET> )? ( <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> <NUMBER_LITERAL> )+ ( <RBRACKET> )? ( <EOF> )?</TD>
</TR>
</TABLE>
</BODY>
</HTML>