有人知道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 /&gt; 还有,
InputElementXMLContent
::
他们都提供&lt; ,但是如何解析其他需要 InputElementRegExp
的表达式?
答案 0 :(得分:2)
那么,XMLInitialiser是不是也应该处理InputElementRegExp?
是的,XMLInitialiser
(或XMLListInitialiser
)会使用与XMLMarkup
匹配的InputElementRegExp
元素。
规范试图拒绝。
怎么样?
他们都做&lt;可用,但那么如何解析需要InputElementRegExp的其他表达式? [在评论中:] ...因扫描
InputElementRegExp
和InputElementXMLContent
而造成冲突,这是因为<
符号位于XMLInitialiser
的第一位或XMLListInitialiser
。
如果您说InputElementRegExp
和InputElementXMLContent
之间存在冲突,因为它们都导出'&lt;':不,这不是冲突,因为这两个符号从不在同一个地方使用指向输入。见第8节第3段:
“InputElementXMLContent
用于允许XML元素的文字内容的语法上下文中。InputElementRegExp
符号用于所有其他语法语法上下文。”
也就是说,在任何给定的句法上下文中,应该只使用一个词汇目标符号(InputElementSomething
)。
另一方面,如果你说XMLInitiliser
和XMLListInitialiser
之间存在冲突,因为它们都是以<
开头的句子:嗯,是的,这将是一个LL(1)解析器的问题,但LL(2)或LR(1)解析器可以处理它,我相信。
我相信&lt;在InputElementXMLContent中生产是一个错误。
我不这么认为。考虑示例<A><B/></A>
。在<A>
之后,语法分析器期待XMLElementContent
或</
,这意味着词法分析器必须使用InputElementXMLContent
作为目标符号。因此后者必须能够匹配<
才能使此解析成功。
[来自评论:]
XMLElement
以<
终端开头,可以嵌套其他元素,因此,它应该是InputElementRegExp
IMO。
再次,请参阅第8节。上面引用的两句话表明,在看到<A>
后,您必须使用InputElementXMLContent
来获取下一个输入元素。
答案 1 :(得分:0)