让我们说,在解析过程的某个时刻,我已经遍历了以下语法推导:
Script -> ScriptBody -> StatementList -> ExpressionStatement -> Expression
麻烦来了。根据规范,Expression
中的ExpressionStatement
只能以AssignmentExpression
或它们的序列结尾。但是,像
a;
12;
"some text";
(据我所知)肯定是表达式语句,但同时不是AssignmentExpression
的任何可能的子类型。它们无法在我的浏览器中解决语法错误。
这些语句返回值是特定的实现还是引擎的功能,或者我在规范中缺少某些内容?也许这些根本不是AssignmentExpressions
,而我误以为是其他东西?
答案 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"
。其他文字和变量引用也是如此。