我对以下规范规则感到困惑。为什么“AdditiveExpression”应该包含另一个“AdditiveExpression”和“MultiplicativeExpression”?
按照以下规则说,我们应首先评估左侧的“AdditiveExpression”和右侧的“MultiplicativeExpression”,但如果操作数的右侧不是“ MultiplicativeExpression“但是”AdditiveExpression“?
答案 0 :(得分:3)
语法说明+
的右操作数必须是一个MultiplicativeExpression。如果不是,则会出现语法错误,并且不会对任何内容进行评估。
例如,表达式1 + 2 + 3
的解析如下:
PrimaryExpression
是MemberExpression
,NewExpression
,LeftHandSideExpression
,UpdateExpression
,是UnaryExpression
ExponentiationExpression
,MultiplicativeExpression
,AdditiveExpression
。
MultiplicativeExpression
是{{3}}。
+
是...... +
。
2
是一个NumericLiteral
,它是(通过上面列出的链)MultiplicativeExpression
。
此时,规则AdditiveExpression : AdditiveExpression + MultiplicativeExpression
(在您的问题中引用)匹配:1 + 2
被解析为AdditiveExpression
。
我们有另一个+
,只是+
。
3
是一个NumericLiteral
,它是(通过上面列出的链)MultiplicativeExpression
。
现在AdditiveExpression : AdditiveExpression + MultiplicativeExpression
再次适用(1 + 2
为AdditiveExpression
,3
为MultiplicativeExpression
。
现在整个事情都是AdditiveExpression
。
答案 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 expression,ExponentiationExpression,UnaryExpression,UpdateExpression是LeftHandSideExpression,是NewExpression,一个MemberExpression PrimaryExpression,Literal,NumericLiteral,This kind of nesting,由Demonstration lexem组成。
{{3}}是如何在JS语法中确定运算符优先级。