<!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>