Какие выражения выражения в ECMAScript на самом деле - PullRequest
0 голосов
/ 29 сентября 2018

Допустим, что в какой-то момент процесса синтаксического анализа я уже прошел следующий вывод грамматики:

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

Здесь возникает проблема.Согласно спецификации, Expression в пределах ExpressionStatement может заканчиваться только как AssignmentExpression или их последовательностью.Однако операторы типа

a;
12;
"some text";

определенно являются выражениями выражений (насколько я понимаю), и в то же время не являются ни одним из возможных подтипов AssignmentExpression.Они не приводят к синтаксической ошибке в моих браузерах.

Это особенность реализации или движка, что эти операторы возвращают значение, или я что-то упустил в спецификации?Может быть, это совсем не AssignmentExpressions, и я принимаю их за что-то другое?

1 Ответ

0 голосов
/ 29 сентября 2018

Когда вы посмотрите на определение 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.То же самое касается других литералов и ссылок на переменные.

...