我对以下规范规则感到困惑。为什么“ AdditiveExpression”应由另一个“ AdditiveExpression”和“ MultiplicativeExpression”组成?

如以下规则所述,我们应该首先在左侧评估“ AdditiveExpression”,在右侧评估“ MultiplicativeExpression”,但是如果操作数的右侧不是“ MultiplicativeExpression”的评估,那么该规则应该怎么做?一个“ AdditiveExpression”?

javascript - ecmascript规范的语法令人困惑-LMLPHP

最佳答案

语法表明+的正确操作数必须是MultiplicativeExpression。如果不是,则会出现语法错误,并且不会评估任何内容。

例如,表达式1 + 2 + 3的解析如下:


1NumericLiteral,这是Literal,是PrimaryExpression
PrimaryExpressionMemberExpression,是NewExpression,是LeftHandSideExpression,是UpdateExpression,是UnaryExpression,是ExponentiationExpression,是MultiplicativeExpression >。
MultiplicativeExpressionAdditiveExpression
+是... +
2NumericLiteral,根据上面列出的链,它是MultiplicativeExpression
此时,规则AdditiveExpression : AdditiveExpression + MultiplicativeExpression(在您的问题中引用)匹配:1 + 2被解析为AdditiveExpression
我们还有另一个+,就是+
3NumericLiteral,根据上面列出的链,它是MultiplicativeExpression
现在,AdditiveExpression : AdditiveExpression + MultiplicativeExpression再次适用(1 + 2AdditiveExpression3MultiplicativeExpression)。
现在整个都是一个AdditiveExpression

07-25 20:46