javascript - 为什么使用 `=` 文字而不是部分 `AssignmentOperator` 符号为赋值运算符指定单独的产生式

标签 javascript ecmascript-6 context-free-grammar compiler-construction

AssignmentExpression 的 EcmaScript 语法指定以下内容:

AssignmentExpression :
    ConditionalExpression
    YieldExpression
    ArrowFunction
    AsyncArrowFunction
    LeftHandSideExpression = AssignmentExpression                     <-------------- here
    LeftHandSideExpression AssignmentOperator AssignmentExpression

AssignmentOperator : one of
    *= /= %= += -= <<= >>= >>>= &= ^= |= **=

我想知道将 LeftHandSideExpression = AssignmentExpression 指定为单独的产品而不是简单地将 = 包含到 AssignmentOperator 背后的基本原理是什么?

最佳答案

如果合并两个产生式,语法将完全等价。

但是,规范后面的几个地方对这两个产品进行了不同的处理。例如在语法之后的静态语义部分,然后是解构赋值部分,这仅适用于 = 产生式。

如果这两个产生式是一个,那么当 AssignmentOperator=”。

所以大概这两个作品是分开写的,所以在文本中分开讨论它们会更容易也不会造成混淆。

关于javascript - 为什么使用 `=` 文字而不是部分 `AssignmentOperator` 符号为赋值运算符指定单独的产生式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46744200/

相关文章:

regex - 需要帮助检查我的 CFG 问题是否正确

javascript - 使用一个 API 调用的响应来执行另一 API 调用

javascript - 无法读取 null 的属性进行破坏

parsing - 以 Go 为目标匹配 ANTLR4 中任何可打印的类字母字符

antlr - 指定 "appearing in any order but only at most once"的语法规则

javascript - 根据需要将对象转换为合并对象

javascript - 对所有选定的复选框使用函数

javascript - React-router-dom v6 显示除默认 URL 之外的空白页面

javascript - 将状态设置为父级

javascript - 对象.defineProperty : setters for dom elements properties