1

ANTLRMavenプラグインを使用したMavenプロジェクトでNetbeans7.1.1を使用して、Lexer +ParserJavaクラスを生成しています。これは機能します。

私が解決するのに苦労していること:

レクサークラスとパーサークラスが開発時に見つかるように、同じプロジェクト内にテストリグを構築するにはどうすればよいですか?

指定するMavenの方法はありますか:最初に「生成されたソース」のものをビルドし(つまり、Antlrで生成された)、次に私の「手動」ソースをビルドしますか?

最初のプロジェクトに依存するセカンダリMavenプロジェクトを構築する必要がありますか?

すでに存在するパーサー/レクサークラスには実際には存在しないANTLRテストリグクラスを構築するための「汎用」(動的?)メカニズムはありますか?('ClassForName' JDBCスタイルのメカニズム?)

問題を明確にするため。これが私のテストリグクラスのスニペットです。これはコンパイルできません(レクサー/パーサーがまだビルドされていないためです...):

...
    myLexer lexer = new myLexer(input);
    CommonTokenStream tokens = new CommonTokenStream(lexer);
    myParser parser = new myParser(tokens);
    parser.file();
...

OK-以下のアドバイスと生成されたJavaの再確認の後-実際、私の文法ファイル(javaパッケージ構造に配置されていますが)に、生成されたJavaプロジェクトを指定する@headerディレクティブが含まれていないことに気づいていませんでした住むクラス。

これが、私のテスト(または実際に私のメインプログラム)がLexer/Parserクラスを表示できなかった理由です。(私は単に、私が思っていたものとは異なるパッケージ構造にあるJavaクラスにアクセスしようとしていました)。

この他のStackOverFlowケースは、私にとって最後のクリンチャーでした。

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

4

1 に答える 1

2

最も重要なことは、次のように antlr3-maven-plugin を正しく構成することです。

  <plugin>
    <groupId>org.antlr</groupId>
    <artifactId>antlr3-maven-plugin</artifactId>
    <version>3.4</version>
    <executions>
      <execution>
        <goals>
          <goal>antlr</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

さらに、文法を正しい場所src/main/antlr3とパッケージ名に配置します。これを使用することで、文法はそこから Java コードを生成し、ソースも確実にコンパイルします。私は自分のANTLRを小さなプロジェクトで使用しています。例として見てくださいまた、生成されたパーサーを使用した単体テストの例も見ることができます。

于 2012-12-27T17:05:54.503 に答える