6

antlr4 maven プラグインを使用して TestRig クラスを実行する方法を理解するのに少し苦労していますか?

私がmvn antlr4:help -Ddetail=true見つけた唯一のドキュメントである の出力を読みましたが、これには TestRig の使用方法については言及されていません。では、maven と一緒にテスト リグを使用する推奨される方法は何ですか? ここで grun エイリアス メソッドを使用するのはあまりエレガントではないようです。

更新 - 推論

こんにちは :)

誤解のないように言っておきますが、Maven プラグインでこの機能を使用したくない理由がよくわかりません。そして、なぜその魂の目的が文法をコンパイルすることであるべきなのか理解できませんか?

現在、Maven でビルドを維持し、 を使用するantlr4-maven-pluginと、Maven リポジトリにプラグインと antlr 4.1 の両方がインストールされます。これが既にあるのに、クラスパスに何かを追加してエイリアスを作成し始めるのはなぜですか? つまり、これがmavenの本当の目的です。antlr4:TestRig目標があれば、それを実行するだけです。クラスパスを手動で維持したり、bash エイリアスを作成したりする必要はありません。それはうまくいくでしょう。

そして、クラスパスでローカルのmavenリポジトリから要素をハードコーディングし、bashエイリアスを維持するよりもはるかにエレガントになります。または、1 つにつき 2 つのインストールを維持します。使用したい antlr のバージョン (1 つは TestRig を使用するために私が保守し、もう 1 つは他のすべてのために Maven が保守します)。

さらに、別のバージョンの antlr を使用したい場合は、クラスパスとエイリアスを更新する必要はありません。maven は単にこれらすべてを管理してくれます :)

4

4 に答える 4

5

これは、Maven で TestRig を呼び出す方法です。

mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig" 
-Dexec.args="<DOT_NOTATION_GRAMMAR_CLASSPATH> <START_RULE> 
-gui <INPUT_FILE>"

したがって、src/main/antlr4/com/test/parser に MyGrammar.g4 があり、開始ルールが startRule の場合:

mvn exec:java -Dexec.mainClass="org.antlr.v4.runtime.misc.TestRig" 
-Dexec.args="com.test.parser.MyGrammar startRule 
-gui <INPUT_FILE>"
于 2014-12-21T23:21:50.567 に答える
2

TestRig -gui文法をデバッグするためのオプションを使用したいという点で、同様の質問がありました。経由で GUI を実行する方法は見つかりませんでしたantlr4-maven-pluginが、満足のいく CLASSPATH を構築することができました。を含めることが重要でしたtarget/classes

# Assuming your project is in $PROJECT ..
CLASSPATH=".:/usr/local/lib/antlr-4.1-complete.jar:$PROJECT/target/classes"
alias grun='java org.antlr.v4.runtime.misc.TestRig'
mvn -q compile
grun MyGrammer startingRule -gui < test_input

構文ツリーの素敵な GUI ビューを生成する必要があります。

于 2013-11-06T18:44:00.450 に答える
1

Maven プラグインがTestRigクラスを実行するのはなぜですか? Maven プラグインの仕事は、.g4文法ファイルを.java適切なパッケージの場所にあるソース ファイルに変換し、生成されたファイルが確実にコンパイルされるようにすることです。TestRigその一部には使用されません。

編集:私は長年、多くのアプリケーションでANTLRを使用してきました。その間ずっと、システムのクラスパスを更新したり、コマンドラインから ANTLR/gunit/TestRig を操作したり、そのエイリアスを作成したりしたことはありません。そうすることは自動テストには役に立たず、必然的にユーザーをあなたが説明した問題に導きます。とはいえ、TestRig には Maven プラグインでの特別なサポートが必要だという考えも頭に浮かびませんでした。より優れたソリューションが既に存在するからです。

いくつかの代替案

  1. inspect()Surefire プラグインを使用して、文法に対して直接操作を実行する JUnit テストを作成できます (レクサー/パーサーを作成し、入力を解析し、結果の解析ツリーを呼び出すことさえできます。
  2. TestRig.main(String[])Surefire プラグインを使用して、正しい引数で明示的に呼び出す JUnit テストを作成できます。
  3. ANTLR 4 Maven プラグインを変更して、TestRig を実行するための新しい目標を追加し、プル リクエストをプロジェクトに送信して将来のリリースに含めることができます (すでに 2 つの代替案があるため、非常に説得力のあるケースを作成する必要があります)。 ANTLR を使用したプロジェクトの長期的な成功テストに適しています 4)。
于 2013-09-02T21:56:10.733 に答える
0

Maven を使用して TestRig を実行するというアイデアが気に入っています。しかし、コードに依存関係を追加するのは好きではありませんorg.antlr:antlr4(既に持っているorg.antlr:antlr4-runtimeため)。私の解決策は、追加の依存関係を使用して exec プラグインを構成することです。

<properties>
    <antlr.version>4.7.1</antlr.version>
</properties>           
...
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <id>TestRigGui</id>
            <phase>none</phase>
            <goals>
                <goal>java</goal>
            </goals>
            <configuration>
                <mainClass>org.antlr.v4.gui.TestRig</mainClass>
                <arguments>                             
                    <!-- Grammar -->
                    <argument>de.humanfork.experiment.antlr.Hello</argument>
                    <!-- start rule -->
                    <argument>hello_rule</argument>
                    <!-- enable gui -->
                    <argument>-gui</argument>
                    <!-- input file -->
                    <argument>example.txt</argument>
                </arguments>                
                <includePluginDependencies>true</includePluginDependencies>
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.antlr</groupId>
            <artifactId>antlr4</artifactId>
            <version>${antlr.version}</version>
        </dependency>
    </dependencies>
</plugin>

次に使用します: mvn exec:java@TestRigGuiGUI を起動します。

ところで:ANTLR 4.7.1では、TestRigのメインクラスは次のとおりです。org.antlr.v4.gui.TestRig

于 2022-01-27T17:37:09.550 に答える