ANTLR (1) antlr4-toolsでANTLRを試す

あるテキストの解析をすることになり、パーサジェネレータでパーサを作ってみようと思っています。昔々、yacc/lex (bison/flex) を使ってある言語のパーサーを作成しましたが、今は文法ファイルの作成を支援するツールも含まれた強力なツールがありますね。今回はANTLRを使ってみることにしました。年末年始のお休み中に遊んでみようと思います。

ANLTRを少し試してみるなら公式サイトにANTLR Labというページもあります。ブラウザ上で文法定義と入力となるテキストを渡してあげると構文木を表示してくれます。

lab.antlr.org

ローカルで試すならantlr4-toolsというものが実行に必要な環境も作ってくれるので良さそうです。今回はこちらを使います。

github.com

antlr4-toolsの導入

antlr4-toolsの導入に必要なのはPython3のみです。ここではPythonパッケージをPython仮想環境venvにインストールすることにします。次のコマンドで仮想環境を作成して有効化します。

$ python3 -m venv .venv
$ . .venv/bin/activate

次にantlr4-toolsをインストールします。

$ pip install antlr4-tools
Collecting antlr4-tools
Collecting install-jdk (from antlr4-tools)
Installing collected packages: install-jdk, antlr4-tools
Successfully installed antlr4-tools-0.1 install-jdk-0.3.0

仮想環境には次の2つのコマンドがインストールされました。この時点ではまだANTLR4もJavaもインストールされていません。

.venv/
   antlr4
   antlr4-parse

ここでantlr4コマンドを実行してみると、つぎのようなメッセージが表示されます。

Downloading antlr4-4.11.1-complete.jar
ANTLR tool needs Java to run; install Java JRE 11 yes/no (default yes)? 

ANTLR4のJARファイルをダウンロードしようとしています。さらに次の行でJRE 11をインストールするか聞いてきます。デフォルトがyesなのでそのままリターンキーを押下すると次のように表示されます。

Installed Java in /home/someone/.jre/jdk-11.0.17+8-jre; remove that dir to uninstall
ANTLR Parser Generator  Version 4.11.1
 -o ___              specify output directory where all output is generated
 -lib ___            specify location of grammars, tokens files
 -atn                generate rule augmented transition network diagrams
 -encoding ___       specify grammar file encoding; e.g., euc-jp
 -message-format ___ specify output style for messages in antlr, gnu, vs2005
 -long-messages      show exception details when available for errors and warnings
 -listener           generate parse tree listener (default)
 -no-listener        don't generate parse tree listener
 -visitor            generate parse tree visitor
 -no-visitor         don't generate parse tree visitor (default)
 -package ___        specify a package/namespace for the generated code
 -depend             generate file dependencies
 -D<option>=value    set/override a grammar-level option
 -Werror             treat warnings as errors
 -XdbgST             launch StringTemplate visualizer on generated code
 -XdbgSTWait         wait for STViz to close before continuing
 -Xforce-atn         use the ATN simulator for all predictions
 -Xlog               dump lots of logging info to antlr-timestamp.log
 -Xexact-output-dir  all output goes into -o dir regardless of paths/package

JRE 11がインストールされ、antlr4コマンドのオプションの説明が表示されます。

ANTLR4のJARファイルとJRE 11はそれぞれ次の場所にインストールされました。

$HOME/.m2/repository/org/antlr/antlr4/4.11.1/antlr4-4.11.1-complete.jar
$HOME/.jre/jdk-11.0.17+8-jre

ここまででantlr4-toolsの導入が終わり、ANTLR4を動かす準備ができました。

次回はantlr4-parseコマンドを使って構文解析してみます。