有人知道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
元素。
规范试图拒绝这一点。
为何如此?
它们都使 [注释:] ... ...在扫描InputElementRegExp
和InputElementXMLContent
时会引起冲突,这是因为<
符号在XMLInitialiser
或XMLListInitialiser
中排在首位。
如果您说InputElementRegExp
和InputElementXMLContent
之间存在冲突,因为它们都派生'
“在允许XML元素的文字内容的语法上下文中使用InputElementXMLContent
。在所有其他语法语法上下文中使用InputElementRegExp
符号。”
也就是说,在任何给定的语法上下文中,都应该只使用一个词法目标符号(InputElementSomething
)。
另一方面,如果您说XMLInitiliser
和XMLListInitialiser
之间存在冲突,因为它们都派生以<
开头的句子:嗯,是的,这对于LL(1)解析器来说是个问题,但是我相信LL(2)或LR(1)解析器可以处理它。
我相信InputElementXMLContent中的
我不这么认为。考虑示例<A><B/></A>
。在<A>
之后,句法解析器将使用XMLElementContent
或</
,这意味着词汇解析器必须使用InputElementXMLContent
作为目标符号。因此,后者必须能够匹配<
才能使解析成功。
[摘自注释:] XMLElement
从<
终端开始,并且可能嵌套其他元素,因此,它应该是InputElementRegExp
IMO。
同样,请参见第8节。我在上面引用的两句话表明,看到<A>
之后,必须使用InputElementXMLContent
来获取下一个输入元素。