Вопрос

Согласно Спецификация 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top