antlrを使用してDSLを作成しています。 LexerとParserは1つの文法ファイル(例えばlayout.g)で書かれています。ツリー文法は別の文法ファイル(例えばlayoutTree.g)に書かれています。今、ツリーパーサが正しく解析されていません。パーサからのAST出力とその正しい出力を表示しました。私は生成されたツリーパーサコードを歩き、トークン値宣言がツリーパーサとパーサの異なる値を割り当てることがわかりました。パーサとツリーパーサからのサンプル出力です。antlrの文法ファイルからトークンファイルを作成する方法
パーサ出力
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など)に問題はありますか?このファイルはプロジェクトで空です。このファイルはどのように生成できますか?
「.tokens」ファイルは、レクサー/パーサーの生成中に自動的に生成されます。 '.tokens'ファイルが空であるという事実は良くありません。どのようにあなたのレクサー/パーサーを生成していますか? (コマンドライン、IDE、ANTLRWorks、その他?) –
私はsourceforge.netから 'antlrv3ide'を使用します。私は "http://antlrv3ide.sourceforge.net/updates"からインストールしました。コマンドラインを使ってどのように生成できますか? – hnm
コマンドラインで、 'java -cp antlr-3.2.jar org.antlr.Tool layout.g'と' java -cp antlr-3.2.jar org.antlr.Tool layoutTree.g'を実行してください。 –