<div dir="ltr"><div dir="ltr">Here is the beginning of fieldTypes (I will probably rewrite the SF field types  to match something more ANTLR-like. There's issues with SFBool (it's not VRML).<div><br></div><div><div>SFBool : \s*(true|false)\s*;</div><div>MFBool : '[' (SFBool)* ']'</div><div>SFColor : \s*(([+]?((0(\.[0-9]*)?|\.[0-9]+)|1(\.0*)?)([Ee][+-]?[0-9]+)?)\s+){2}([+]?((0(\.[0-9]*)?|\.[0-9]+)|1(\.0*)?)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFColor : '[' (SFColor)* ']'</div><div>SFColorRGBA : \s*(([+-]?((0(\.[0-9]*)?|\.[0-9]+)|1(\.0*)?)([Ee][+-]?[0-9]+)?)\s+){3}([+-]?((0(\.[0-9]*)?|\.[0-9]+)|1(\.0*)?)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFColorRGBA : '[' (SFColorRGBA)* ']'</div><div>SFDouble : \s*([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFDouble : '[' (SFDouble)* ']'</div><div>SFFloat : \s*([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFFloat : '[' (SFFloat)* ']'</div><div>SFImage : \s*([+]?(0|[1-9][0-9]*)([Ee][+]?[0-9]+)?\s+){2}[+]?[0-4](\s+(0x[0-9a-fA-F]{1,16}|[+]?(0|[1-9][0-9]*)([Ee][+]?[0-9]+)?))*\s*;</div><div>MFImage : '[' (SFImage)* ']'</div><div>SFInt32 : \s*[+-]?(0|[1-9][0-9]*)([Ee][+-]?[0-9]+)?\s*;</div><div>MFInt32 : '[' (SFInt32)* ']'</div><div>SFMatrix3d : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){8}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFMatrix3d : '[' (SFMatrix3d)* ']'</div><div>SFMatrix3f : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){8}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFMatrix3f : '[' (SFMatrix3f)* ']'</div><div>SFMatrix4d : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){15}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFMatrix4d : '[' (SFMatrix4d)* ']'</div><div>SFMatrix4f : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){15}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFMatrix4f : '[' (SFMatrix4f)* ']'</div><div>MFNode : '[' (SFNode)* ']'</div><div>SFRotation : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){3}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFRotation : '[' (SFRotation)* ']'</div><div>SFString : (\s|\S)*;</div><div>MFString : '[' (SFString)* ']'</div><div>SFTime : \s*([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFTime : '[' (SFTime)* ']'</div><div>SFVec2d : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){1}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFVec2d : '[' (SFVec2d)* ']'</div><div>SFVec2f : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){1}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFVec2f : '[' (SFVec2f)* ']'</div><div>SFVec3d : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){2}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFVec3d : '[' (SFVec3d)* ']'</div><div>SFVec3f : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){2}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFVec3f : '[' (SFVec3f)* ']'</div><div>SFVec4d : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){3}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFVec4d : '[' (SFVec4d)* ']'</div><div>SFVec4f : \s*(([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s+){3}([+-]?((0|[1-9][0-9]*)(\.[0-9]*)?|\.[0-9]+)([Ee][+-]?[0-9]+)?)\s*;</div><div>MFVec4f : '[' (SFVec4f)* ']'</div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 23, 2023 at 10:51 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr">Here's the beginning of an HAnimHumanoid, for example:<div><br></div><div><div>('DEF' xs:ID)? 'HAnimHumanoid' '{'</div><div>(</div><div>   'bboxCenter' SFVec3f</div><div>|  'bboxDisplay' SFBool</div><div>|  'bboxSize' bboxSizeType</div><div>|  'center' SFVec3f</div><div>|  'description' SFString</div><div>|  'info' MFString</div><div>|  'IS' (IS)</div><div>|  'jointBindingPositions' MFVec3f</div><div>|  'jointBindingRotations' MFRotation</div><div>|  'jointBindingScales' MFVec3f</div><div>|  'joints' (HAnimJoint)*</div><div>|  'loa' loaType</div><div>|  'metadata' (X3DMetadataObject)</div><div>|  'motions' (HAnimMotion)*</div><div>|  'motionsEnabled' MFBool</div><div>|  'name' xs:NMTOKEN</div><div>|  'rotation' SFRotation</div><div>|  'scale' SFVec3f</div><div>|  'scaleOrientation' SFRotation</div><div>|  'segments' (HAnimSegment)*</div><div>|  'sites' (HAnimSite)*</div><div>|  'skeletalConfiguration' SFString</div><div>|  'skeleton' (HAnimJoint|HAnimSite)*</div><div>|  'skin' (Group|Transform|Shape|IndexedFaceSet)*</div><div>|  'skinBindingCoords' (Coordinate|CoordinateDouble)</div><div>|  'skinBindingNormals' (X3DNormalNode)</div><div>|  'skinCoord' (Coordinate|CoordinateDouble)</div><div>|  'skinNormal' (X3DNormalNode)</div><div>|  'translation' SFVec3f</div><div>|  'version' xs:NMTOKEN</div><div>|  'viewpoints' (HAnimSite)*</div><div>|  'visible' SFBool</div><div>|  'class' xs:NMTOKENS</div><div>|  'id' xs:NMTOKEN</div><div>|  'style' SFString</div><div>)*</div><div>'}'</div><div>| 'USE' xs:IDREF;</div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 23, 2023 at 10:43 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr">Hmm.  Looks good.  I am riffing off of:<div><br></div><div><a href="https://github.com/ingowald/antlr-vrml/blob/master/vrml.g4" target="_blank">https://github.com/ingowald/antlr-vrml/blob/master/vrml.g4</a><br></div><div><br></div><div>I don't know if X3DUOM supports ordering, which probably has combinatorial explosion if employed, so I'll probably go for something simpler in the long run.</div><div><br></div><div>This is interesting, I'm not only targeting Java or Python: <a href="https://github.com/antlr/antlr4/blob/master/doc/targets.md" target="_blank">https://github.com/antlr/antlr4/blob/master/doc/targets.md</a></div><div><br></div><div>Hmm!</div><div><br></div><div>John</div></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 23, 2023 at 9:19 AM GPU Group <<a href="mailto:gpugroup@gmail.com" target="_blank">gpugroup@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div dir="ltr"><div dir="ltr"><p class="MsoNormal">tangentially related, may relate to importer for x3d.py:</p><p class="MsoNormal">vrml input<span></span></p>

<p class="MsoNormal"><a href="https://sourceforge.net/projects/pyvrml97/" target="_blank">https://sourceforge.net/projects/pyvrml97/</a>
<span></span></p>

<p class="MsoNormal">which uses:<br></p><p class="MsoNormal"><span></span></p>

<p class="MsoNormal">from simpleparse.parser import Parser <span></span></p>

<p class="MsoNormal"><a href="https://pypi.org/project/SimpleParse/" target="_blank">https://pypi.org/project/SimpleParse/</a>
<span></span></p>

<p class="MsoNormal">- EBNF single pass for largely deterministic grammars<span></span></p><p class="MsoNormal">parser.py snippet:</p><p class="MsoNormal">grammar = r'''</p><p class="MsoNormal">header         := headerStatement,profileStatement,componentStatement*,metaStatement*</p><p class="MsoNormal">headerStatement  := ('#X3D',ts,SFNumber,ts,'utf8',ts,headerComment?,newLine)/('#',headerComment?,newLine)</p><p class="MsoNormal">headerComment  := -newLine+</p><p class="MsoNormal">profileStatement := 'PROFILE', ts, profileName,newLine</p><p class="MsoNormal">profileName    := name</p><p class="MsoNormal"><newLine>      := ('\r\n'/'\r'/'\n')</p><div>...</div><div><br></div><p class="MsoNormal"><br></p></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 23, 2023 at 7:47 AM John Carlson <<a href="mailto:yottzumm@gmail.com" target="_blank">yottzumm@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hmm.<div><br></div><div>I'm thinking about generating a Classic VRML grammar from X3DUOM using Python, and then using ANTLR4 to generate Java code for inclusion in various experiments with GraalVM's Polyglot, Truffle, etc.</div><div><br></div><div>Hmm.</div><div><br></div><div>Hmm.</div><div><br></div><div>Hmm.</div><div><br>Maybe in another life.</div><div><br></div><div>John</div></div>
_______________________________________________<br>
x3d-public mailing list<br>
<a href="mailto:x3d-public@web3d.org" target="_blank">x3d-public@web3d.org</a><br>
<a href="http://web3d.org/mailman/listinfo/x3d-public_web3d.org" rel="noreferrer" target="_blank">http://web3d.org/mailman/listinfo/x3d-public_web3d.org</a><br>
</blockquote></div>
</blockquote></div>
</blockquote></div>
</blockquote></div>