比較した結果、ANTLR4の開発環境はEclipseのANTLR4 IDEが最も良い

数日前まで、関数型プログラミング言語F#で、HaskellのパーサーコンビネータPersecを移植したFParsecを試していました。F#を使っていくうちに再帰処理も当たり前に実装できるようになったため、JavaのパーサージェネレータANTLR4に挑戦しました。

ANTLRではいくつか開発環境があるので、簡単な四則演算の計算機を作って開発環境を評価してみました。結論から言うとEclipse 4.6.1 + 「ANTLR4 IDE」が最も良いです。良い理由は以下です。

  1. 保存時にコンパイルが実行される。
  2. 編集中にリアルタイムで、シンタックスダイアグラム表示。(あとで画像説明します。)
  3. ParseTreeビューで、書いたパーサををすぐ試せる。

詳細な説明は後からgifキャプチャーと共にしますが、シンタックスハイライトと文法チェックがないとちょっとしたミスで時間を取られすぎます。コマンドラインとメモ帳などは時間の無駄なのでやめましょう。

試した開発環境

  1. Visual Studio Code + 拡張機能「ANTLR4 grammar syntax support」
  2. IntelliJ IDEA 2016.3.1 + プラグイン「ANTLR v4 grammar」
  3. Eclipse 4.6.1 + 「ANTLR 4 IDE 0.3.6」
  4. Eclipse 4.6.1 + 「AntlrDT 4.3.1」

 

Visual Studio Code + 拡張機能「ANTLR4 grammar syntax support」
ハイライトのみでシンタックスエラーなどは検知できません。

Visual Studio Codeの拡張機能では、ハイライト表示だけで、文法チェックなどはできませんでした。

IntelliJ IDEA 2016.3.1 + プラグイン「ANTLR v4 grammar」

IntelliJのプラグインは、リアルタイムで文法チェックができ、文法ファイルから問題なくJavaファイルを生成できたら、ANTLR Preview(二枚目の画像)ですぐにテストもできます。また.g4拡張子のファイルがANTLRのファイルと認識されるので、通常のJavaプロジェクトにそのまま配置できます。

リアルタイムで文法チェック
すぐにパーサーをテスト可能
コンテキストメニューから、ファイル生成と設定が可能
Javaプロジェクトにg4拡張子のファイルを置くだけ

上記は、Javaプロジェクトを作成して、g4フォルダーを作って、そこに.g4拡張子のANTLRファイルを置きました。設定で.g4の出力ファイル先をsrc/simpleに向けているので、パーサーを作成した後すぐにJavaで実行することができました。

注意点としては、このプラグインをインストールしても、Javaプロジェクトにantlrライブラリーのクラスパスが通るわけではないので、別途公式からantlrライブラリーをダウンロードしてきて設定する必要があります。

Eclipse 4.6.1 + 「AntlrDT 4.3.1」

こちらは初心者向けではありませんでした。初期設定で、レキサーとパーサーが分けられたファイルが生成されます。また.g4ファイル内にJavaのソースコードを直接埋め込むことも可能ですが、字句解析、構文解析を学ぶ上では、まずは、簡単な文法ファイルと、そこから生成したJavaファイルを、Javaプロジェクトで実行したほうが各作業が独立していてわかりやすいです。そのためはじめANTLRを使う方にはこの拡張機能はお勧めしません。

Eclipse 4.6.1 + 「ANTLR 4 IDE 0.3.6」

ANTLR4 IDEもリアルタイムに文法チェックが動作するので非常に効率が良いです。

リアルタイムに文法チェック

パーサージェネレーターを学ぶ上で大変なのは、ちょっとした文法ミスなどを見つけづらい事です。とくに字句解析、構文解析を学び始めた段階では、エディターとコンパイラーのみだと記号の書き忘れなど簡単なミスで結構な時間を取られます。

以下のように、リアルタイムにSyntax Diagramを表示しくれると、今どこが意図したとおりに実装されていて、どこに誤りがあるかが明確になります。

Syntax Diagramで視覚的に分かりやすい
Parse Treeですぐにテスト!

ある程度文法を作成したら、その文法をエディターで選択すると、ParseTreeビューに、[Calc::calc]のように表示されます。その下の入力欄に、適当な入力をすると構文木が作成されて意図した実装になっているかすぐに確認できます。

実際に入力してみると、リアルタイムでチェックが実行されているので、「1 +」のように途中の場合は、エラー表示がされます。上記ではエディターでcalcを範囲選択しましたが、exprやnumberの部分も選択可能です。なのでexprなど小さな構文をまずテストして、そのあとに、Calc::calcをテストするのが普通です。

設定はプロジェクト単位

この拡張機能は、プロジェクト単位で設定するようです。ANTLRプロジェクトを作成できますが、Javaプロジェクトを作成して、antlr4など適当なフォルダーを作成して、Calc.g4のようにファイルを保存しても問題なく使えます。

Javaプロジェクトに.g4ファイルを置いても問題ない。

プロジェクトを右クリックしてコンテキストメニューからPropertiesを選択すると、以下PropertiesダイアログからANTLRの出力先を指定できるので、./srcにします。ANTLRによって生成されたJavaファイルがEclipseにより自動でコンパイルされて、./binフォルダーにクラスファイルが作成されます。あとはこれを呼び出すクラスを作成していけばよいです。

まとめ

ANTLR4の開発環境の評価をしました。ふだんIntelliJで開発していてもANTLR4の場合はEclipseでやったほうがよさそうです。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA