Как производственное правило ECMAScript AssignmentExpression может создать `foo = 42`?

Как указано в спецификации (да, 5.1, это намеренно ):

AssignmentExpression :

    ConditionalExpression
    LeftHandSideExpression = AssignmentExpression
    LeftHandSideExpression AssignmentOperator AssignmentExpression

Основываясь на этом определении, я не понимаю, как допустимо простое присваивание foo = 42.

Насколько я понимаю, за foo = всегда должно следовать либо ConditionalExpression, либо, по сути, другое назначение, но в этом случае как закончится производство, если я не использую ConditionalExpression? Все дальнейшие правила AssignmentExpression требуют либо ConditionalExpression, либо другого AssignmentExpression.

Что мне здесь не хватает?


person whoami    schedule 18.07.2020    source источник
comment
Раздел после этого объясняет, как именно foo = 42 обрабатывается   -  person ibrahim mahrir    schedule 18.07.2020
comment
Да, вы должны использовать правило ConditionalExpression. Буквенное число 42 является допустимым ConditionalExpression (как и действительным AssignmentExpression), попробуйте найти его!   -  person Bergi    schedule 18.07.2020
comment
@Bergi, спасибо за совет, ты был прав. Очевидно, я пытался отследить его, но остановился на BitwiseXORExpression, полагая, что я на неправильном пути. :D Если вы опубликуете ответ, я с радостью его приму!   -  person whoami    schedule 18.07.2020
comment
@ibrahimmahrir спасибо за совет. К сожалению, в этом разделе не объясняется, как завершается производство, а только то, как вычислить такое выражение. Берги дал правильный намек сразу после вашего комментария.   -  person whoami    schedule 18.07.2020


Ответы (1)


Выражение после оператора = всегда должно быть AssignmentExpression. Это AssignmentExpression часто будет состоять не из другого присваивания, а из простого ConditionalExpression, которое, в свою очередь, будет состоять из более простого выражения, которое может содержать или не содержать оператор, вниз по иерархии приоритета операторов до Literal, который формирует ваш номер 123.

person Bergi    schedule 18.07.2020