Parser Functions
Parser Functions
前述のようにparseSourceFile
は初期状態をセットアップし、それをparseSourceFileWorker
関数に渡します。
parseSourceFileWorker
parseSourceFileWorker
最初にSourceFile
ASTノードを作成します。次に、parseStatements
関数から始まるソースコードを解析します。それが返ってくると、nodeCount
、identifierCount
などの追加情報を含むSourceFile
ノードを完成させます。
parseStatements
parseStatements
最も重要なparseFoo
スタイルの関数の1つです(次に説明する概念です)。これは、Scannerから返された現在のtoken
によって切り替えられます。例えば現在のトークンが SemicolonToken
であればparseEmptyStatement
を呼び出して空文のASTノードを作成します。
Nodeの作成
パーサには、Foo
ノードを生成するparserFoo
関数がたくさんあります。これらは一般的にFoo
Nodeが期待される時点で(他のParser関数から)呼び出されます。このプロセスの典型的なサンプルは、;;;;;;
のような空文をパースするために使われるparseEmptyStatement()
関数です。以下にその関数の全体があります:
これは、3つの重要な関数createNode
、parseExpected
とfinishNode
を示しています。
createNode
createNode
ParserのcreateNode
関数function createNode(kind: SyntaxKind, pos?: number): Node
はノードの作成、渡されたときのSyntaxKind
のセットアップ、渡された場合の初期位置の設定(または、現在のスキャナの位置を使います)を行います。
parseExpected
parseExpected
ParserのparseExpected
関数function parseExpected(kind: SyntaxKind, diagnosticMessage?: DiagnosticMessage): boolean
は、Parserの状態に含まれる現在のトークンが目的のSyntaxKind
と一致することをチェックします。そうでなければ、送られたdiagnosticMessage
を報告するか、foo expected
の形式の一般的なものを作成します。これは内部的にparseErrorAtPosition
関数(スキャン位置を使用します)を使用して良いエラー報告を行います。
finishNode
finishNode
ParserのfinishNode
関数function finishNode<T extends Node>(node: T, end?: number): T
はNodeのend
位置や、parserContextFlags
のように便利なモノを設定します。これは、このNodeを解析する前にエラーがあったとしても、同じようにパースされます(その場合、インクリメンタルパーシングでこのASTノードを再利用できません)。
最終更新