ANTLR を使用して文字ストリームから AST を生成する方法を理解しています。
プログラムでASTを作成し、ANTLRに文法のルールを適用して有効な出力を生成できるようにしたいと思います。たとえば、引用符や空白など、ASTにない構文を追加します。
ツリー ウォーカーを使用するには、TreeNodeStream に接続された TokenStream が必要なようですが、ツリーがプログラムで作成された場合、TokenStream はありません。CommonTreeNodeStream で setTokenStream(...) の呼び出しに失敗すると、実行時に NullPointerExceptions が発生します。
例:
TokenStream tokens = new CommonTokenStream(new MyLexer(somestream));
// parse an AST 'ast' from this stream
CommonTreeNodeStream nodes = new CommonTreeNodeStream(ast);
// needs this or npe
nodes.setTokenStream(tokens);
new MyWalker(nodes).start();
そう-文字ストリーム入力なしでオンザフライでASTを作成し、文法で定義された規則に従って、生成されたANTLRクラスに文字ストリームを生成させることができますか?