Movatterモバイル変換


[0]ホーム

URL:


CtrlK
このページ内

Parser

TypeScript Parserのソースコードは完全にparser.tsにあります。ScannerはソースコードをASTに変換するためにParserによって内部的に制御されます。下記は、望まれる結果の概要です。

SourceCode ~~ scanner ~~> Token Stream ~~ parser ~~> AST

Parserはシングルトンとして実装されています(scannerと同様の理由です。再初期化が可能な場合は再作成したくありません)。実際には、Parserのための_state_変数とシングルトンscannerを含むnamespace Parserとして実装されています。前に述べたように、const scannerを含んでいます。Parserの関数はこのScannerを管理します。

Programによる使用例

ParserはProgramによって間接的に駆動されます(実際には前述のCompilerHostによって実際に実行されるので、間接的です)。基本的に以下が、単純化したコールスタックです:

Program ->    CompilerHost.getSourceFile ->        (global function parser.ts).createSourceFile ->            Parser.parseSourceFile

parseSourceFileは、Parserのstateを準備するだけでなく、initializeStateを呼び出すことによってscannerの状態を準備します。その後、parseSourceFileWorkerを使ってソースファイルを解析します。

サンプルの使用法

Parser内部を深く掘り下げる前に、(ts.createSourceFileを使用して)ソースファイルのASTを取得するためにTypeScriptのParserを使用するサンプルコードを次に示します。

code/compiler/parser/runParser.ts

import*as tsfrom"ntypescript";functionprintAllChildren(node:ts.Node, depth=0) {console.log(newArray(depth+1).join('----'),ts.formatSyntaxKind(node.kind),node.pos,node.end);    depth++;node.getChildren().forEach(c=>printAllChildren(c, depth));}var sourceCode=`var foo = 123;`.trim();var sourceFile=ts.createSourceFile('foo.ts', sourceCode,ts.ScriptTarget.ES5,true);printAllChildren(sourceFile);

これは以下を出力します:

SourceFile 0 14---- SyntaxList 0 14-------- VariableStatement 0 14------------ VariableDeclarationList 0 13---------------- VarKeyword 0 3---------------- SyntaxList 3 13-------------------- VariableDeclaration 3 13------------------------ Identifier 3 7------------------------ FirstAssignment 7 9------------------------ FirstLiteralToken 9 13------------ SemicolonToken 13 14---- EndOfFileToken 14 14

あなたの頭を左に傾けると、これは非常に右に偏った木のように見えます。

最終更新

役に立ちましたか?


[8]ページ先頭

©2009-2025 Movatter.jp