在 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/