JavaScript 语法符号

标签 javascript grammar context-free-grammar

在 ECMAScript 的 5.1.5 语法符号部分有一个关于参数化产生式的语法符号示例

References to nonterminals on the right-hand side of a production can also be parameterized. For example:

StatementList :
    ReturnStatement
    ExpressionStatement[+In]

is equivalent to saying:

StatementList :
    ReturnStatement
    ExpressionStatement_In

应该是

StatementList :
    ReturnStatement
    ExpressionStatement
    ExpressionStatement_In

类似于产生式左侧的非终结符?

最佳答案

不,我认为这是故意的。它参数添加到生产中。尽管 ExpressionStatement_In 会更短,但混合使用参数化和非参数化非终结符会更加困惑。

FWIW,In 参数表示(如 13.10 中所述):

The [In] grammar parameter is needed to avoid confusing the in operator in a relational expression with the in operator in a for statement.

所以 Expression[+In] 意味着 in 运算符可以出现在产生式中并且不会导致语法歧义,而 Expression[~In] 表示 in 可能不会出现在表达式中,因为它会与 for ... in 混淆。因此 for(a in b; false; ) { } 是语法错误。

关于JavaScript 语法符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73522554/

相关文章:

javascript - 使用 Javascript/jQuery 动态添加行跨度

javascript - 初始化 WebSocket 时 IE11 上的 SecurityError

c++ - 在C++中使用1-d索引数组访问n-d数组元素的更好方法?

c# - C#中的语法生成类实现

regex - 如何从正则表达式中找到语言?

context-free-grammar - 构建上下文无关语法

javascript - 在 javascript 的父闭包中引用 "this"

javascript - Chrome 扩展 : getBackgroundPage() fails only occasionally

grammar - Peg.JS 中的左递归错误

parsing - 解析器/词法分析器忽略不完整的语法规则