0

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 など) に問題がありますか? このファイルは私のプロジェクトでは空です。このファイルを生成するにはどうすればよいですか?

4

1 に答える 1

0

あなたの木の文法にこのようなものはありますか?

options
{
  tokenVocab=layout; //NOT layout.g or layout.tokens
  ASTLabelType=pANTLR3_BASE_TREE;
}
于 2011-07-25T22:03:41.890 に答える