Как NullLiteral представляется в виде дерева?
-
15-09-2020 - |
Вопрос
Согласно Спецификация ECMAScript в разделе 7.8.1 а NullLiteral
определяется следующим образом:
NullLiteral :: нулевой
Я пытаюсь понять, как это представляется в виде дерева, когда NullLiteral
входит в следующие произведения найденные в разделах 7.6.1 и 7.8.
ReservedWord :: Keyword FutureReservedWord NullLiteral BooleanLiteral Literal :: NullLiteral BooleanLiteral NumericLiteral StringLiteral
Мое лучшее предположение о том, как это будет выглядеть, таково:
InputElementDiv | Token | IdentifierName | ReservedWord | Literal | NullLiteral | нулевой
Хотя мне это кажется неправильным.
Примечание
Судя по моим исследованиям, очень немногие компиляторы действительно генерируют CST на основе грамматики языка.Я, конечно, могу понять почему, но для меня это обучающее упражнение, поэтому я хочу разобраться в этом, прежде чем перейду к более профессиональным средствам синтаксического анализа, таким как использование генератора синтаксического анализа.
Решение
Показанное дерево не охвачено грамматикой, поскольку оно не обеспечивает вывода из IdentifierName
к ReservedWord
, и это не позволяет получить ReservedWord
к Literal
или.
А ReservedWord
производство фактически используется только для ограничения действительных значений IdentifierName
, и это следует рассматривать на лексическом уровне.Это не превращается в CST, где вы увидите только IdentifierName
.
Контекстом Literal является PrimaryExpression, поэтому фрагмент реального CST может выглядеть так:
...
|
PrimaryExpression
|
Literal
|
NullLiteral
|
null