2010-07-14 2 views
2

Согласно В разделе ECMAScript specification7.8.1NullLiteral определяется следующим образом:Как выглядит NullLiteral в виде дерева?

 
NullLiteral :: 
    null 

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

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

Мое предположение о том, как это будет выглядеть так:

 
InputElementDiv 
    | 
    Token 
    | 
IdentifierName 
    | 
ReservedWord 
    | 
Literal 
    | 
NullLiteral 
    | 
    null 

Это просто не кажется мне правильным, хотя.

Примечание

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

+0

Как о предоставлении ссылки на соответствующий раздел (ы) спецификаций? – LukeH

+0

Не могли бы вы объяснить немного больше о том, почему синтаксическое дерево, которое вы создали с , кажется вам неправедным? Я не вижу проблемы там. –

+0

@Jim - Я думаю, что мое основное замешательство заключается в том, где размещать 'Literal' или' ReservedWord' в иерархической структуре ниже 'IdentifierName'. Кто знает, может быть, нет проблем. Я изучаю все это самостоятельно, и нет синтаксиков CST ECMAScript 5, о которых я знаю, и это не из-за отсутствия поиска. – ChaosPandion

ответ

2

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

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

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

... 
    | 
PrimaryExpression 
    | 
Literal 
    | 
NullLiteral 
    | 
    null 
+0

Значит ли это, что InputElementDiv не входит в CST? – ChaosPandion

+0

Нет, это не так. Спектр говорит, что это символ цели лексической грамматики, который наряду с InputElementRegExp предназначен для различения двух лексеров. Фактически, при использовании производства InputElementDiv вы получите «null» в качестве идентификатора. Из синтаксиса и точки зрения CST скорее посмотрите на символы, которые могут быть получены из программы. – Gunther

+0

Никогда в жизни я не должен был так много работать, чтобы что-то понять. Это потрясающе. Я просто жду, чтобы он наконец нажал. В любом случае, позвольте мне подумать о том, что вы сказали, на случай, если мне нужно немного разъяснить. – ChaosPandion