Как 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
Другие вопросы по тегам