Зачем указывать отдельную продукцию для оператора присваивания с символом `=` вместо символа `AssignmentOperator`
Грамматика EcmaScript для AssignmentExpression определяет следующее:
AssignmentExpression :
ConditionalExpression
YieldExpression
ArrowFunction
AsyncArrowFunction
LeftHandSideExpression = AssignmentExpression <-------------- here
LeftHandSideExpression AssignmentOperator AssignmentExpression
AssignmentOperator : one of
*= /= %= += -= <<= >>= >>>= &= ^= |= **=
Мне интересно, что является обоснованием определения LeftHandSideExpression = AssignmentExpression
как отдельное производство вместо простого включения =
в AssignmentOperator
?
1 ответ
Грамматика была бы полностью эквивалентна, если бы два производства были объединены.
Тем не менее, в спецификации есть несколько мест, где эти два произведения рассматриваются по-разному. Например, в разделе "Статическая семантика" сразу после грамматики, а затем в разделе "Назначение деструктурирования", который применяется только к =
производство.
Если бы эти два произведения были одним, фразы, относящиеся к ним, должны были бы быть более неловкими, например: "LeftHandSideExpression AssignmentOperator AssignmentExpression
когда AssignmentOperator
является =
".
Итак, предположительно, эти два произведения были записаны по отдельности, поэтому проще и менее запутанно говорить о них отдельно в тексте.