Является ли функция JavaScript вызовом LeftHandSideExpression, то есть ExpressionStatement?

Я пытаюсь доказать, что простой вызов функции, такой как

window.alert();

является допустимой грамматикой EcmaScript 2016 (7th Edition). Работая в обратном направлении, ожидая, что это ExpressionStatement, я вижу, что он соответствует шаблону MemberExpression Arguments, который является CallExpression. Кроме того, раздел 12.3 определяет LeftHandSideExpression как, возможно, CallExpression. Теперь моя проблема заключается в том, что раздел 12.15 AssignmentExpression, по-видимому, требует, чтобы за LeftHandSideExpression следовал либо AssignmentExpression, либо AssignmentOperator и AssignmentExpression не могут быть ;

Я, наверное, упускаю что-то простое. Направление будет высоко оценено.


person Matthias    schedule 14.03.2017    source источник


Ответы (1)


Который, наконец, может состоять из LeftHandSideExpression о котором мы заботились.

Спасибо, Берги. Но разве UpdateExpression не требует, чтобы оператор инкремента или декремента следовал за LeftHandSideExpression?

person Bergi    schedule 14.03.2017
comment
@Matthias Нет, просто _1_ — это первый из пяти вариантов, поэтому они ему не нужны. - person Matthias; 14.03.2017
comment
12.4 Теперь вижу! Спасибо друзья! - person Sebastian Simon; 14.03.2017
comment
@Matthias Оба UpdateExpression правила в главе ASI и производство UpdateExpression в Annex не содержит правила, согласно которому оно может состоять только из LeftHandSideExpression, но это похоже на редакционную ошибку в автоматически сгенерированном приложении. Кстати, это будет исправлено в ES8. - person Matthias; 14.03.2017
comment
@Bergi Положительные моменты за то, что я не сумасшедший, и отрицательные за то, что я не был тщательным. Очень ценю последующую информацию. - person Bergi; 14.03.2017
comment
AssignmentExpression не обязательно должно быть задание, это означает только «здесь может стоять задание». Он также может состоять только из ConditionalExpression. А теперь нам нужно пройти всю цепочку правил ассоциативности:
A ConditionalExpression может содержать тернарный оператор или состоять только из LogicalOREexpression. LogicalOREexpression может содержать _1_ или состоят только из логического выражения AND. И так далее: LogicalANDExpression может состоять только из BitwiseOREexpression, который может состоять только из BitwiseXOREexpression который может состоять только из BitwiseANDExpression, который может состоять только из EqualityExpression , который может состоять только из RelationalExpression, который может состоять только из ShiftExpression, который может состоять только из AdditiveExpression, который может состоять только из MultiplicativeExpression, который может состоять из исключительно ExponentiationExpression, которое может состоят исключительно из UnarExpression, который может состоять только из UpdateExpression. - person Matthias; 14.03.2017