web-dev-qa-db-ja.com

ANTLRのターゲットパッケージを指定するにはどうすればよいですか?

私が電話した場合:

Java org.antlr.Tool -o outdir sources/com/example/Java5.g

... antlr-3.1.3を使用すると、パーサーとレクサーのコードがディレクトリoutdir/sources/com/exampleに生成されます。ただし、生成されたクラスにはpackageステートメントがありません。パッケージcom.exampleでそれらを存続させる必要があります。

ターゲットパッケージを指定する方法はありますか?

42
tangens

ANTLRは、パッケージとインポートを含めることができるヘッダーツールを提供します。これを* .g文法ファイルに含めます。

@header {
    package org.xmlcml.cml.converters.antlr;
    import Java.util.HashMap;
}

また、レクサーでも必要になる場合があります。

@lexer::header {package org.xmlcml.cml.converters.antlr;}

メンバーとコードを追加する必要がある場合:

@members {
    HashMap<String, Object> objectMap = new HashMap<String, Object>();
    //...

    private void addArrayValue(String content) {
    //... code required by snippets in the grammar

    }
}
62

完全に良い答えの古い質問ですが、質問へのコメントはコマンドラインオプションを求めていたので(そしてそれは私がここに着いたときに実際に探していたものでした)、私はただチャイムを鳴らして次のように言うと思いました.。。

ANTLR 4を使用している場合は、コマンドラインでパッケージを指定できます。I checked バージョン3にはないようですので、 other の答えがANTLR3に行きます。

次に例を示します。

Java -cp antlr-4.4-complete.jar org.antlr.v4.Tool -package my.package MyGram.g4

詳細については、 ANTLRツールのコマンドラインオプション-packageオプションを参照してください。

24
kmp