混淆ecmascript规范的语法

时间:2017-12-16 12:38:29

标签: javascript ecmascript-7

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

按照以下规则说,我们应首先评估左侧的“AdditiveExpression”和右侧的“MultiplicativeExpression”,但如果操作数的右侧不是“ MultiplicativeExpression“但是”AdditiveExpression“?

Ecmascript Specification

2 个答案:

答案 0 :(得分:3)

语法说明+ 的右操作数必须是一个MultiplicativeExpression。如果不是,则会出现语法错误,并且不会对任何内容进行评估。

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

答案 1 :(得分:1)

  

为什么" AdditiveExpression"应该由另一个" AdditiveExpression"和" MultiplicativeExpression"?

这样你就可以无限地嵌套链加法表达式:1 + 1 + 1 + 1 + …

  

如果操作数的右侧不是" MultiplicativeExpression"的评估,该规则应该怎么做?但是" AdditiveExpression"?

这没有发生。表达式1 + 1 + 1确实解析为(1 + 1) + 1(右侧 是一个乘法表达式),而不是1 + (1 + 1)

  

单个数字可以解析为" MultiplicativeExpression"?

是。右侧的单个数字是乘法表达式,电梯侧的单个数字是addititive expression

AdditiveExpression[Yield, Await]: MultiplicativeExpression[?Yield, ?Await]

也是multiplicative expressionExponentiationExpressionUnaryExpressionUpdateExpressionLeftHandSideExpression,是NewExpression,一个MemberExpression PrimaryExpressionLiteralNumericLiteralThis kind of nesting,由Demonstration lexem组成。

{{3}}是如何在JS语法中确定运算符优先级。