siteHOMEまとめOSSOthersContactメニューRSSFeedlyホーム>技術メモJava/GradleでのANTLRの使い方、その12019年9月25日Antlrとは、いわゆるパーサージェネレータであり、プログラミング言語の文法を定義してやると、そのパーサーを自動生成してくれるものだ。オレオレ言語の文法を定義するANTLRに上の定義を入れてやると、その「オレオレ言語のソースをパースするJavaプログラム」を生成するもちろん、ANTLRが作り出すJavaプログラムは、「言語ソースをパースする」というだけのものだ。入力されたソースがオレオレ言語文法に沿っているのかをチェックし、そうであればその要素に分解してくれるというだけである。要素に分解された後で、それに対して何をするのかは、自前で書かなくてはいけない。例によってEclipse上にプロジェクトを作成し、JavaソースはEclipseの流儀に合わせる。通常のJavaソースはsrcフォルダに、antlrのソースはprsに入れる。4をサポートしているのだそうだ。したがって、dependenciesで今回はantlr4を指定してやる。“org.antlr:antlr4:4.7′′」などと指定する。オレオレ言語の定義としては、prsフォルダの中にtest.g4とでもして以下を入れる(どこからか持ってきたもので、何をするものかわかっていない)。;Eclipseプロジェクトは以下のようになる。Javaソースは適当だ。プロジェクトの依存関係とコンパイル最終的には、antlrでtest.g4を処理させてパーサのJavaソースコードを生成させ、それをコンパイルする。その上で、それを利用する本体Javaプログラム(今は何も無い)をコンパイルし、最終出力(jarなり何なり)を得るというわけなのだが、gradleのantlrプラグインにはこの依存が仕込まれている。compileJavaとすれば、自動でantlr側の処理をやってくれるようだ。そこでcompileJavaを行う。するとbuild以下にパーサのソースが生成される。パーサーソース生成先を変更し、パッケージを追加させる上記では、デフォルトのフォルダにパーサーのソースが生成され、そのパッケージ名も記述されていない。「build/generated-src/antlr/main/myparser/testParser.java」などというファイルになり、しかも、以下のようにpackageが記述されていない。「myparser」というパッケージのフォルダに格納されているにも関わらずだ。自前のJavaソースから生成コードを呼び出すために、「ソースフォルダ」に出力させたい当然だが、packageを記述してもらわないと面倒。"org.antlr:antlr4:4.7"}test.g4ではなくTest.g4という名称にし、以下に変更。grammer名称もTestにする。@headerをつける。;gradleで「generateGrammarSource」を実行する。これはコンパイルせずにJavaソースを出力させるだけになる。この場合はbuildフォルダには何も出力されない。Test.g4というオレオレ言語定義から、それをパースするJavaソースコード(パーサ)を生成させ、それをsrc2フォルダに格納させた。後は、オレオレ言語をきちんと定義し、このパーサを使って処理するだけだ。これが大変なわけだが。コメントを拾うには、これまでのやり方ではだめのようだ。コメントをキャンセルメールアドレスが公開されることはありません。*ウェブサイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。