假设在解析过程的某个时刻,我已经遍历了以下语法派生:
Script -> ScriptBody -> StatementList -> ExpressionStatement -> Expression
麻烦来了。根据规范,ExpressionStatement
中的Expression
只能以AssignmentExpression
或一系列形式结束。但是,像这样的陈述
a;
12;
"some text";
绝对是表达式语句(据我所知(,同时不是AssignmentExpression
的任何可能的子类型。它们无法解析为我的浏览器中的语法错误。
这些语句返回值是特定实现或引擎的功能,还是我在规范中缺少某些内容?也许,这些根本不AssignmentExpressions
,我把它们误认为是别的东西?
当你查看AssignmentExpression
的定义时,你会发现它解析为,例如,AssignmentExpression
->ConditionalExpression
->LogicalORExpression
->LogicalANDExpression
->BitwiseORExpression
->BitwiseXORExpression
->BitwiseANDExpression
->EqualityExpression
->RelationalExpression
->ShiftExpression
->AdditiveExpression
->MultiplicativeExpression
->ExponentiationExpression
->UnaryExpression
->UpdateExpression
->LeftHandSideExpression
->NewExpression
->MemberExpression
->PrimaryExpression
->Literal
->StringLiteral
。
所以"some text"
是一个有效的AssignmentExpression
.其他文字和变量引用也是如此。