2

セクション7.8.1のECMAScript仕様によると、aは次のように定義されています。NullLiteral

NullLiteral :: 
     null

私が理解しようとしているのは、セクション7.6.17.8NullLiteralにある次のプロダクションにaが含まれている場合に、これがツリー形式でどのように表されるかです。

ReservedWord ::
    キーワード
    FutureReservedWord
    NullLiteral
    BooleanLiteral
リテラル::
    NullLiteral
    BooleanLiteral
    NumericLiteral
    StringLiteral

それがどのように見えるかについての私の最もよい推測はこれです:

InputElementDiv
    |
  トークン
    |
IdentifierName
    |
ReservedWord
    |
 リテラル
    |
NullLiteral
    |
   ヌル

しかし、これは私には正しくないようです。

ノート

私の調査によると、言語文法から実際にCSTを生成するコンパイラはほとんどないようです。もちろん理由は理解できますが、これは私にとって学習演習であるため、パーサジェネレータを使用するなど、より専門的な構文解析手段に移行する前に、これを正しく理解したいと思います。

4

1 に答える 1

2

示されているツリーは、からの派生を提供せず、どちらへの派生も提供IdentifierNameしないため、文法でカバーされていません。ReservedWordReservedWordLiteral

実際、ReservedWordプロダクションはの有効な値を制限するためにのみ使用されIdentifierName、これは字句レベルで確認する必要があります。だけが表示されるCSTにはなりませんIdentifierName

LiteralのコンテキストはPrimaryExpressionであるため、実際のCSTのフラグメントは次のようになります。

   ...
    |
PrimaryExpression
    |
 Literal 
    |
NullLiteral 
    |
   null
于 2010-07-16T16:27:54.640 に答える