E4X规格有误吗?

时间:2017-10-29 17:43:16

标签: javascript xml specifications e4x

有人知道ECMAScript for XML(E4X; ECMA-3572º版)并阅读其规范吗?我知道,已经贬低了。要开始我的问题,请先让我指出一些事情:

E4X允许使用<x/>这样的表达式,从而通过 PrimaryExpression 制作来扩展 XMLInitialiser | XMLListInitialiser

然而,他们说:

  

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

(对于XML列表也一样。)

那么, XMLInitialiser 是不是也应该处理 InputElementRegExp ?规范试图拒绝这一点。请检查以下定义:

XMLInitialiser

  • XMLMarkup
  • XMLElement

XMLElement

  • &lt; XMLTagContent XMLWhitespace opt /&gt;

还有,

InputElementXMLContent ::

  • &LT;
  • 以及......

他们都提供&lt; ,但是如何解析其他需要 InputElementRegExp 的表达式?

2 个答案:

答案 0 :(得分:2)

  

那么,XMLInitialiser是不是也应该处理InputElementRegExp?

是的,XMLInitialiser(或XMLListInitialiser)会使用与XMLMarkup匹配的InputElementRegExp元素。

  

规范试图拒绝。

怎么样?

  

他们都做&lt;可用,但那么如何解析需要InputElementRegExp的其他表达式?   [在评论中:] ...因扫描InputElementRegExpInputElementXMLContent而造成冲突,这是因为<符号位于XMLInitialiser的第一位或XMLListInitialiser

如果您说InputElementRegExpInputElementXMLContent之间存在冲突,因为它们都导出'&lt;':不,这不是冲突,因为这两个符号从不在同一个地方使用指向输入。见第8节第3段:

InputElementXMLContent用于允许XML元素的文字内容的语法上下文中。InputElementRegExp符号用于所有其他语法语法上下文。”

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

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

  

我相信&lt;在InputElementXMLContent中生产是一个错误。

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

  

[来自评论:] XMLElement<终端开头,可以嵌套其他元素,因此,它应该是InputElementRegExp IMO。

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

答案 1 :(得分:0)

这让我很头疼。但是,重新查看第8节,其中有一个例子,

order = <{x}>{item}</{x}>;

相当于

(规范位图)

table

我认为 InputElementXMLContent 中的&lt; 制作是错误的。