<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 15 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"Plain Text Char";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
span.PlainTextChar
        {mso-style-name:"Plain Text Char";
        mso-style-priority:99;
        mso-style-link:"Plain Text";
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1575163572;
        mso-list-type:hybrid;
        mso-list-template-ids:-2051369316 -397508472 134807577 134807579 134807567 134807577 134807579 134807567 134807577 134807579;}
@list l0:level1
        {mso-level-text:"%1\)";
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-GB link="#0563C1" vlink="#954F72"><div class=WordSection1><p class=MsoPlainText>Hi,<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Having looked at the grammar relating to prototype instances I think it does not actually need modification. That said, however, I think clarity could be improved. I suggest the following.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>The current productions for the non-terminals proto and externproto are as follows:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoNormal><i><span style='mso-fareast-language:EN-GB'>proto </span></i><span style='mso-fareast-language:EN-GB'>::= <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><b><span style='mso-fareast-language:EN-GB'>PROTO</span></b><i><span style='mso-fareast-language:EN-GB'> nodeTypeId </span></i><b><span style='mso-fareast-language:EN-GB'>[</span></b><i><span style='mso-fareast-language:EN-GB'> interfaceDeclarations</span></i><b><span style='mso-fareast-language:EN-GB'> ] {</span></b><i><span style='mso-fareast-language:EN-GB'> protoBody </span></i><b><span style='mso-fareast-language:EN-GB'>}</span></b><span style='mso-fareast-language:EN-GB'> ; <o:p></o:p></span></p><p class=MsoNormal><i><span style='mso-fareast-language:EN-GB'>externproto </span></i><span style='mso-fareast-language:EN-GB'>::= <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><b><span style='mso-fareast-language:EN-GB'>EXTERNPROTO</span></b><i><span style='mso-fareast-language:EN-GB'> nodeTypeId</span></i><b><span style='mso-fareast-language:EN-GB'> [</span></b><i><span style='mso-fareast-language:EN-GB'> externInterfaceDeclarations </span></i><b><span style='mso-fareast-language:EN-GB'>]</span></b><i><span style='mso-fareast-language:EN-GB'> URLList </span></i><span style='mso-fareast-language:EN-GB'>;<o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>The non-terminal nodeTypeId is the same non-terminal that is used in the definition of the production for the non-terminal node:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoNormal><i><span style='mso-fareast-language:EN-GB'>node </span></i><span style='mso-fareast-language:EN-GB'>::= <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><i><span style='mso-fareast-language:EN-GB'>nodeTypeId </span></i><b><span style='mso-fareast-language:EN-GB'>{</span></b><span style='mso-fareast-language:EN-GB'> <i>nodeBody </i><b>}</b> | <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><b><span style='mso-fareast-language:EN-GB'>Script {</span></b><i><span style='mso-fareast-language:EN-GB'> scriptBody </span></i><b><span style='mso-fareast-language:EN-GB'>}</span></b><span style='mso-fareast-language:EN-GB'> |<o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><b><i><span style='mso-fareast-language:EN-GB'>ComposedShader</span></i></b><span style='mso-fareast-language:EN-GB'> <b><i>{</i></b><i>composedShaderBody<b>}</b> |<br><b>PackagedShader</b> <b>{</b>packagedShaderBody<b>}</b> |<br><b>ShaderProgram</b> <b>{</b>shaderProgramBody<b>} </b>;</i> <o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>I think this could be improved by introducing two additional non-terminals, namely protoInstance and protoNodeTypeId. Taking the latter first, this would align with nodeTypeId and have the following production:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoNormal><i><span style='mso-fareast-language:EN-GB'>protoNodeTypeId </span></i><span style='mso-fareast-language:EN-GB'>::= <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><i><span style='mso-fareast-language:EN-GB'>Id</span></i><span style='mso-fareast-language:EN-GB'> ; <o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>The production for protoInstance, aligning with node, would be:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoNormal><i><span style='mso-fareast-language:EN-GB'>protoInstance </span></i><span style='mso-fareast-language:EN-GB'>::= <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><i><span style='mso-fareast-language:EN-GB'>protoNodeTypeId </span></i><b><span style='mso-fareast-language:EN-GB'>{</span></b><span style='mso-fareast-language:EN-GB'> <i>nodeBody </i><b>} </b>; <o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>The productions for the non-terminals proto and externproto would then be amended to<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoNormal><i><span style='mso-fareast-language:EN-GB'>proto </span></i><span style='mso-fareast-language:EN-GB'>::= <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><b><span style='mso-fareast-language:EN-GB'>PROTO</span></b><i><span style='mso-fareast-language:EN-GB'> protoNodeTypeId </span></i><b><span style='mso-fareast-language:EN-GB'>[</span></b><i><span style='mso-fareast-language:EN-GB'> interfaceDeclarations</span></i><b><span style='mso-fareast-language:EN-GB'> ] {</span></b><i><span style='mso-fareast-language:EN-GB'> protoBody </span></i><b><span style='mso-fareast-language:EN-GB'>}</span></b><span style='mso-fareast-language:EN-GB'> ; <o:p></o:p></span></p><p class=MsoNormal><i><span style='mso-fareast-language:EN-GB'>externproto </span></i><span style='mso-fareast-language:EN-GB'>::= <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><b><span style='mso-fareast-language:EN-GB'>EXTERNPROTO</span></b><i><span style='mso-fareast-language:EN-GB'> protoNodeTypeId</span></i><b><span style='mso-fareast-language:EN-GB'> [</span></b><i><span style='mso-fareast-language:EN-GB'> externInterfaceDeclarations </span></i><b><span style='mso-fareast-language:EN-GB'>]</span></b><i><span style='mso-fareast-language:EN-GB'> URLList </span></i><span style='mso-fareast-language:EN-GB'>;<o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Finally, the production for the non-terminal nodeStatement would be expanded to explicitly include protoInstance, as follows:<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoNormal><i><span style='mso-fareast-language:EN-GB'>nodeStatement </span></i><span style='mso-fareast-language:EN-GB'>::= <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><i><span style='mso-fareast-language:EN-GB'>node</span></i><span style='mso-fareast-language:EN-GB'> | <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><i><span style='mso-fareast-language:EN-GB'>protoInstance</span></i><span style='mso-fareast-language:EN-GB'> |<o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><b><span style='mso-fareast-language:EN-GB'>DEF </span></b><i><span style='mso-fareast-language:EN-GB'>nodeNameId node</span></i><span style='mso-fareast-language:EN-GB'> | <o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><b><span style='mso-fareast-language:EN-GB'>DEF</span></b><span style='mso-fareast-language:EN-GB'> </span><i><span style='mso-fareast-language:EN-GB'>nodeNameId </span></i><i><span style='mso-fareast-language:EN-GB'>protoInstance </span></i><span style='mso-fareast-language:EN-GB'>|</span><span style='mso-fareast-language:EN-GB'><o:p></o:p></span></p><p class=MsoNormal style='margin-left:36.0pt'><b><span style='mso-fareast-language:EN-GB'>USE</span></b><i><span style='mso-fareast-language:EN-GB'> nodeNameId</span></i><span style='mso-fareast-language:EN-GB'> ;<o:p></o:p></span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>This has the following advantages:<o:p></o:p></p><ol style='margin-top:0cm' start=1 type=1><li class=MsoPlainText style='margin-left:0cm;mso-list:l0 level1 lfo1'>It allows text that states the non-terminal nodeTypeId can be the type of any of the built-in nodes defined in the abstract standard 19775-1. <o:p></o:p></li><li class=MsoPlainText style='margin-left:0cm;mso-list:l0 level1 lfo1'>It allows text that states the non-terminal protoNodeTypeId is the type of any user defined prototype<o:p></o:p></li><li class=MsoPlainText style='margin-left:0cm;mso-list:l0 level1 lfo1'>It clearly separates the built-in nodes from prototypes within the grammar.<o:p></o:p></li></ol><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>All the best,<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Roy<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><span lang=EN-US style='mso-fareast-language:EN-GB'>-----Original Message-----<br>From: x3d [mailto:x3d-bounces@web3d.org] On Behalf Of Spec Feedback<br>Sent: 19 July 2017 17:59<br>To: x3d@web3d.org<br>Subject: [x3d] Spec Comment by brutzman on 19776-2: ClassicVRML Encoding - V3.3</span></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-- Submitter indicates that this comment may be public: *Yes* --<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Comment on 19776-2: ClassicVRML Encoding - V3.3 Annex A (normative) Grammar <a href="http://www.web3d.org/documents/specifications/19776-2/V3.3/Part02/grammar.html"><span style='color:windowtext;text-decoration:none'>http://www.web3d.org/documents/specifications/19776-2/V3.3/Part02/grammar.html</span></a><o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>-----------------<o:p></o:p></p><p class=MsoPlainText>Subject: need explicit definition of DEF and USE associated with prototype instances in ClassicVRML grammar<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>ClassicVRML formal grammar does not include explicit definition of DEF and USE associated with prototype instance statements.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>The current grammar seems to lean on prose definitions in section A.2 to augment rules in A.3.  More is needed: better prose, additional rule(s), or both.<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Email thread exploring this issue found at <a href="http://web3d.org/pipermail/x3d-public_web3d.org/2017-July/007155.html"><span style='color:windowtext;text-decoration:none'>http://web3d.org/pipermail/x3d-public_web3d.org/2017-July/007155.html</span></a><o:p></o:p></p><p class=MsoPlainText>(see second half)<o:p></o:p></p><p class=MsoPlainText>-----------------<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>Submitted on Wednesday, 2017,  July 19 - 9:59am by brutzman (brutzman )<o:p></o:p></p><p class=MsoPlainText>IP: 162.225.68.164<o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>See: <a href="http://www.web3d.org/node/1694/submission/1396"><span style='color:windowtext;text-decoration:none'>http://www.web3d.org/node/1694/submission/1396</span></a><o:p></o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText><o:p> </o:p></p><p class=MsoPlainText>_______________________________________________<o:p></o:p></p><p class=MsoPlainText>x3d mailing list<o:p></o:p></p><p class=MsoPlainText><a href="mailto:x3d@web3d.org"><span style='color:windowtext;text-decoration:none'>x3d@web3d.org</span></a><o:p></o:p></p><p class=MsoPlainText><a href="http://web3d.org/mailman/listinfo/x3d_web3d.org"><span style='color:windowtext;text-decoration:none'>http://web3d.org/mailman/listinfo/x3d_web3d.org</span></a><o:p></o:p></p></div></body></html>