0

ANTLRWorks を使用して ANTLR 文法を作成しています。有効な文法があり、パーサーとレクサーのソース ファイルも生成されます。生成されたコードのデバッグも試みましたが、出力はデバッガー出力で期待どおりです。

しかし、デバッガーによって生成された __Test__ クラスを呼び出そうとすると、コンソールに何も表示されません。同じクラスパスで __Test__.java を正常にコンパイルできるため、クラスパスを適切に設定しました。

問題は何でしょうか?antlr と antlrworks を使用してサンプル パーサーを作成およびコンパイルするための明確なチュートリアルはありますか?

4

2 に答える 2

1

コンソールに何が表示されると思いますか?

このプロジェクトを見てください。ANTLRWorks で生成されたパーサーはこちらです。POMの依存関係からわかるように、antlr がクラスパスにあることを確認する必要があります。次に、このクラスに示すようにパーサーを使用します。

final DriftLexer lexer = new DriftLexer(new ANTLRInputStream(inputStream));
final CommonTokenStream tokens = new CommonTokenStream(lexer);        
final DriftParser parser = new DriftParser(tokens);
parser.file();

それはあなたのものも同様に機能させるのに十分なはずです。

于 2008-12-02T22:03:21.457 に答える
1

ANTLRWorks は、ANTLRWorks へのソケット接続を作成するテスト クラスを生成するため、コンソールからは使用できません。生成されたテスト クラスを編集して、デバッグ ポート (ソケット接続) オプションを使用しないようにすることができます。

編集する行は次のとおりです。

FormalSpecParser g = new FormalSpecParser(tokens, 49100, null);

次のように変更できます。

FormalSpecParser g = new FormalSpecParser(tokens, null);

ポートの代わりにデバッグリスナーオブジェクトを使用し、「null」はデバッグリスナーを与えていないことを意味するため、デバッグ出力は無視されます。コンソールにメッセージを出力する独自のデバッグ リスナーを作成できます。

詳細については、ANTLR のドキュメントを参照してください: http://www.antlr.org/api/Java/namespaces.html

于 2010-04-30T21:58:24.427 に答える