Как NullLiteral представлен в виде дерева?
Согласно спецификации ECMAScript в разделе 7.8.1 a NullLiteral
определяется следующим образом:
NullLiteral:: ноль
Я пытаюсь понять, как это представляется в виде дерева, когда NullLiteral
включен в следующие произведения, найденные в разделах 7.6.1 и 7.8.
ReservedWord:: Ключевое слово FutureReservedWord NullLiteral BooleanLiteral Буквальный:: NullLiteral BooleanLiteral ЧисловойЛитерал СтроковойЛитерал
Мое лучшее предположение относительно того, как это будет выглядеть, это:
ВходнойЭлементДеления | знак | ИмяИдентификатора | ReservedWord | буквальный | NullLiteral | ноль
Это просто не кажется мне правильным, хотя.
Заметка
Из моего исследования кажется, что очень немногие компиляторы генерируют CST из грамматики языка. Я, конечно, могу понять, почему, но для меня это учебное упражнение, поэтому я хочу понять это правильно, прежде чем перейти к более профессиональным средствам анализа, таким как использование генератора синтаксических анализаторов.
1 ответ
Дерево, как показано, не покрыто грамматикой, потому что это не обеспечивает вывод из IdentifierName
в ReservedWord
и это не предусматривает получение ReservedWord
в Literal
или.
ReservedWord
производство фактически используется только для ограничения допустимых значений IdentifierName
и это следует видеть на лексическом уровне. Это не превращает это в CST, где вы увидите только IdentifierName
,
Контекстом Literal является PrimaryExpression, поэтому фрагмент реального CST может выглядеть так:
...
|
PrimaryExpression
|
Literal
|
NullLiteral
|
null