ECMAScript中实际上是什么表达式语句

时间:2018-09-29 02:25:32

标签: javascript parsing ecmascript-6 grammar

让我们说,在解析过程的某个时刻,我已经遍历了以下语法推导:

Script -> ScriptBody -> StatementList -> ExpressionStatement -> Expression

麻烦来了。根据规范,Expression中的ExpressionStatement只能以AssignmentExpression或它们的序列结尾。但是,像

这样的语句
a;
12;
"some text";
(据我所知)

肯定是表达式语句,但同时不是AssignmentExpression的任何可能的子类型。它们无法在我的浏览器中解决语法错误。

这些语句返回值是特定的实现还是引擎的功能,或者我在规范中缺少某些内容?也许这些根本不是AssignmentExpressions,而我误以为是其他东西?

1 个答案:

答案 0 :(得分:3)

查看AssignmentExpression的定义时,您会看到它解析为AssignmentExpression-> ConditionalExpression-> LogicalORExpression- > LogicalANDExpression-> BitwiseORExpression-> BitwiseXORExpression-> BitwiseANDExpression-> EqualityExpression-> RelationalExpression-> ShiftExpression-> AdditiveExpression-> MultiplicativeExpression-> ExponentiationExpression-> UnaryExpression-> UpdateExpression-> LeftHandSideExpression-> NewExpression-> { {1}}-> MemberExpression-> PrimaryExpression-> Literal

因此StringLiteral是有效的"some text"。其他文字和变量引用也是如此。