3

ANTLRWorks 1.4.3 を ANTLR 3.4 と共に使用して、文法ファイルから Java ベースのパーサーとレクサーを生成しています。生成されたファイルには次の.javaような文字列が含まれています

C:\\Users\\[path to the eclipse project]\\src\\some\\package\\name\\MyGrammar.g

この絶対パスは次のように使用されます。

  • 文字列を返します (例: getGrammarFileName()lexer および parser のメソッド)。
  • 両方のファイル全体で、コメントとして何度も。

次の欠点があります。

  • 開発環境で別のパスを持つ他の誰かがこれらのファイルを再生成すると、文法ファイルに変更が加えられていなくても、多くの変更が導入されます。
  • 誰も、特にオープン ソース プロジェクトでは、文法ファイルを正確にどこに保存しているかを知る必要はありません。たとえば、どうですかC:\\Users\\simon\\customerA\\crap_software\\[rest of the path to grammar file]

ANTLRWorks または ANTLR s.th でこれを制御する方法はありますか。少なくとも相対パスのみが使用されますか?

4

2 に答える 2

2

最後に、自分の問題を解決する方法を見つけました。

パスは、ANTLR を呼び出す場所と方法に依存しているようです。ANTLRWorks ではこれを達成できませんでしたが、コマンド ライン ANTLR を使用すると、これを実行できます。次のことができます (例は Windows 用ですが、他の OS でも再現できるはずです)。

  1. コマンド ライン用の Antlr をダウンロードし、たとえば次の場所にコピーします。

    C:\Program Files (x86)\ANTLRworks\antlr-3.4-complete.jar.

  2. Windows コマンド ライン ( cmd.exe) を開き、文法ファイルがあるディレクトリに移動します。

    cd C:\Users[path to the eclipse project]\src\some\package\name

  3. 呼び出す

    java -jar "C:\Program Files (x86)\ANTLRworks\antlr-3.4-complete.jar" MyGrammar.g
    

    コマンドラインから。

生成された Java ファイルには、文法ファイルの名前のみが含まれ、パスは含まれなくなります。

于 2012-09-12T12:33:26.083 に答える
0

ANTLRWorks または ANTLR s.th でこれを制御する方法はありますか。少なくとも相対パスのみが使用されますか?

簡潔な答え

いいえ。

より長い(より)回答(非常に主観的な見解が含まれています!自己責任で進めてください)

これはターゲット固有ですが、知る限り、パスのタイプ(絶対または相対)を指定できるターゲットはありません。

「いいえ」は、getGrammarFileName()生成されたレクサー/パーサーのデバッグ中にのみ使用されるためです。また、生成されたソース ファイルをソース管理にチェックインしてはいけませ。そのため、生成されたソース ファイルに表示されるパスを誰も見ることはありません。文法をチェックインして、開発者がそこから独自のレ​​クサー/パーサーを生成できるようにする必要があります。

繰り返しますが、これはすべて私の側の憶測です。

于 2012-09-12T11:31:45.843 に答える