1

ANTLR V3 によって生成された AST 用に Java で手動のツリー ウォーカーを作成しようとしています。AST は、 ANTLR: call a rule from a different grammar で指定されているものと同様に、アイランド グラマーを使用して構築されます。

AST には、各式を子ノードとする式リストのノードがあります。ここで、式を区切った COMMA の行番号を知る必要があります。COMMA は解析中に存在していましたが、AST の書き換え中に削除されました。

CommonTokenStream.getTokens の使用法を示すいくつかのリソース ( hereおよびhere ) が表示されますが、AST の処理中に CommonTokenStream にアクセスする方法がわかりません。ASTの構築に使用されるCommonTokenStreamを取得できる方法はありますか?

4

1 に答える 1

1

トークンの完全なリストはCommonTokenStream.getTokens()、ツリー ウォーカーを呼び出す前に呼び出すことができる からアクセスできます。トークンのリストは、ウォーカーへの引数になります。回復した情報をツリーに埋め込む場合を除き、CommonTree を変更する必要はありません。

トークン リストを使用して、コメントや明示的な行番号 (FORTRAN を考えてください) などの非表示のトークンを、最も近い可視のトークンに関連付けました。これは、AST の後処理と、リスト内のトークンと AST 内のノードの両方で利用可能な行、列、および文字インデックス情報を調べることで行われました。

AST の構築中にそれを試みた結果、ハッキーで保守不可能なコードが作成されました。後処理コード OTOH は、プログラミング 101 アルゴリズムです。

于 2012-11-12T04:41:30.293 に答える