有人知道ECMAScript for XML(E4X; ECMA-3572º版)并阅读其规范吗?我已经过时了。要开始我的问题,请让我先指出以下几点:

E4X允许像<x/>这样的表达式,从而以PrimaryExpression形式扩展XMLInitialiser | XMLListInitialiser

但是,他们说:


  XML初始化程序的语法语法处理由词汇语法目标符号InputElementXMLTag和InputElementXMLContent生成的输入元素。这些输入元素在第8.3节中描述。


(与XML列表相同。)

因此,XMLInitialiser是否也应处理InputElementRegExp吗?规范试图拒绝这一点。请检查以下定义:

XMLInitialiser


XMLMarkup
XMLElement


XMLElement


<XMLTagContent XMLWhitespace opt />


并且,

InputElementXMLContent ::


<
和更多...


它们都使InputElementRegExp的其他表达式?

最佳答案

因此,难道XMLInitialiser也应该处理InputElementRegExp吗?


是的,XMLInitialiser(或XMLListInitialiser)将消耗XMLMarkup匹配的InputElementRegExp元素。


  规范试图拒绝这一点。


为何如此?


  它们都使  [注释:] ... ...在扫描InputElementRegExpInputElementXMLContent时会引起冲突,这是因为<符号在XMLInitialiserXMLListInitialiser中排在首位。


如果您说InputElementRegExpInputElementXMLContent之间存在冲突,因为它们都派生'
“在允许XML元素的文字内容的语法上下文中使用InputElementXMLContent。在所有其他语法语法上下文中使用InputElementRegExp符号。”

也就是说,在任何给定的语法上下文中,都应该只使用一个词法目标符号(InputElementSomething)。

另一方面,如果您说XMLInitiliserXMLListInitialiser之间存在冲突,因为它们都派生以<开头的句子:嗯,是的,这对于LL(1)解析器来说是个问题,但是我相信LL(2)或LR(1)解析器可以处理它。


  我相信InputElementXMLContent中的

我不这么认为。考虑示例<A><B/></A>。在<A>之后,句法解析器将使用XMLElementContent</,这意味着词汇解析器必须使用InputElementXMLContent作为目标符号。因此,后者必须能够匹配<才能使解析成功。


  [摘自注释:] XMLElement<终端开始,并且可能嵌套其他元素,因此,它应该是InputElementRegExp IMO。


同样,请参见第8节。我在上面引用的两句话表明,看到<A>之后,必须使用InputElementXMLContent来获取下一个输入元素。

10-04 18:49