Как NullLiteral представлен в виде дерева? - PullRequest
2 голосов
/ 14 июля 2010

Согласно спецификации ECMAScript в разделе 7.8.1 a NullLiteral определяется следующим образом:

NullLiteral :: 
    <strong>null</strong>

Что я пытаюсь понять, так этокак это представляется в виде дерева, когда NullLiteral включен в следующие произведения, найденные в разделах 7.6.1 и 7.8 .

ReservedWord :: 
    Keyword 
    FutureReservedWord 
    NullLiteral 
    BooleanLiteral 
Literal :: 
    NullLiteral 
    BooleanLiteral 
    NumericLiteral 
    StringLiteral 

My bestугадайте, как это будет выглядеть так:

InputElementDiv
    |
  Token
    |
IdentifierName
    |
ReservedWord 
    |
 Literal 
    |
NullLiteral 
    |
   <strong>null</strong>

Мне это просто не кажется правильным.

Примечание

От моегоИсследования показывают, что очень немногие компиляторы генерируют CST из грамматики языка.Я, конечно, могу понять, почему, но для меня это учебное упражнение, поэтому я хочу понять это правильно, прежде чем перейти к более профессиональным средствам синтаксического анализа, таким как использование генератора синтаксических анализаторов.

1 Ответ

2 голосов
/ 16 июля 2010

Дерево, как показано, не охватывается грамматикой, поскольку оно не обеспечивает деривацию от IdentifierName до ReservedWord, и оно также не обеспечивает получение от ReservedWord до Literal.

Производство ReservedWord фактически используется только для ограничения допустимых значений IdentifierName, и это должно быть видно на лексическом уровне.Он не превращается в CST, где вы видите только IdentifierName.

Контекстом Literal является PrimaryExpression, поэтому фрагмент реального CST может выглядеть следующим образом:

   ...
    |
PrimaryExpression
    |
 Literal 
    |
NullLiteral 
    |
   null
...