antlr を使用して DSL を作成しています。Lexer と Parser は 1 つの文法ファイル (たとえば、layout.g) に記述されています。ツリー文法は、別の文法ファイル (layoutTree.g など) に記述されています。現在、ツリー パーサーは適切に解析していません。パーサーからのAST出力を印刷しましたが、正しいです。生成されたツリー パーサー コードを調べたところ、トークン値宣言がツリー パーサーとパーサーで異なる値を割り当てることがわかりました。以下は、パーサーとツリー パーサーからのサンプル出力です。
パーサー出力
public static final int ARRAY_MEMBER_TOKEN=4;
public static final int ARRAY_TOKEN=5;
public static final int DECLARATION_TOKEN=6;
ツリー パーサーの出力
public static final int EOF=-1;
public static final int DECLARATION_TOKEN=4;
public static final int IDENTIFIER=5;
ご覧のとおり、DECLARATION_TOKEN はパーサー出力とツリー パーサー出力で異なる値を持っています。このツリー パーサーが原因で、期待どおりに動作しません。この問題を修正するにはどうすればよいですか?
生成されたトークン ファイル (layout.token など) に問題がありますか? このファイルは私のプロジェクトでは空です。このファイルを生成するにはどうすればよいですか?