【问题标题】:Is E4X specification wrong?E4X 规范有错吗?
【发布时间】:2017-10-29 17:43:16
【问题描述】:

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

E4X 允许 <x/> 之类的表达式,因此可以使用 XMLInitialiser | XMLListInitialiser 产生式扩展 PrimaryExpression

但是,他们说:

XML 初始化器的句法文法处理由词法文法目标符号 InputElementXMLTag 和 InputElementXMLContent 产生的输入元素。这些输入元素在第 8.3 节中描述。​​

(对于 XML 列表也是如此。)

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

XMLInitialiser

  • XMLMarkup
  • XMLElement

XMLElement

  • XMLTagContent XMLWhitespaceopt/>

还有,

InputElementXMLContent ::

  • 还有更多...

它们都使 可用,但是如何解析需要 InputElementRegExp 的其他表达式?

【问题讨论】:

  • 鉴于自 2014 年以来一直是 obsolete and deprecated,为什么有人想在 2017 年底深入研究 ECMAScript for XML (E4X)?
  • @kjhughes 因为任何想要实现 ActionScript 3 编译器的人都需要为 XML 实现 ECMAScript,对吧?因为 ActionScript 3.0 扩展了 ECMA-262(3º 版;ECMAScript 3.0)和 ECMA-357(2º 版)。
  • 我不会问为什么有人想在 2017 年实现 ActionScript 3 编译器。
  • IIRC,在 Mozilla 试验 E4X 的时候,他们也在尝试重新编写 JavaScript 语法,以便根据最后一个决定 / 启动除法运算符或正则表达式令牌。参见Wayback machine archive of JS2.0 syntax,尤其是“句法再同步”部分。

标签: javascript xml specifications e4x


【解决方案1】:

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

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

规范试图拒绝这一点。

怎么样?

它们都使 InputElementRegExp和InputElementXMLContent会导致冲突,这是因为<符号首先出现在XMLInitialiserXMLListInitialiser中。

如果您说InputElementRegExpInputElementXMLContent 之间存在冲突,因为它们都派生了“

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

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

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

我认为 InputElementXMLContent 中的

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

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

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

【讨论】:

  • 1) 不确定您要表达的意思。 XMLMarkup 仅包括 CDATAcommentPI。我已经在我删除的扫描仪中实现了这些,就像块一样。我知道InputElementRegExp 以及`InputElementXMLContent` 包括XMLMarkup 生产符号。 3)我的术语并不容易。我的意思是扫描InputElementRegExpInputElementXMLContent 会导致冲突,这是因为 符号在XMLInitialiserXMLListInitialiser 中排在第一位。
  • 4) 没有这样的例子。假设这个结论是错误的,XMLElement 终端开始并且可能嵌套其他元素,因此它应该是InputElementRegExp IMO。
  • 1) "XMLMarkup 仅包括 CDATA、评论和 PI。...我知道 InputElementRegExp 以及 InputElementXMLContent 包括 XMLMarkup 生产符号。"同意,但我无法理解您的问题/困难。
  • 4) “没有这样的例子。”我想您的意思是该代码示例未出现在规范中,但我只是说它是该语言中有效句子的示例。规范当然有嵌套元素的例子,但它们并不简单。见 10.1.1、11.1.2、11.1.4、11.2.1、...
  • 4) “它应该是 InputElementRegExp IMO”:编辑了我的回复来解决这个问题。
【解决方案2】:

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

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

等价于

(规格位图)

我认为 InputElementXMLContent 中的 产生式是一个错误。

【讨论】:

    猜你喜欢
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2011-01-17
    • 1970-01-01
    相关资源
    最近更新 更多