Java
antlr

antlrつこてみる

More than 5 years have passed since last update.

ANTLRはLLなパーサジェネレータ
LLとかLRとかどっちがよいのかよくわからないのだけど、なんとなくANTLRつかってみる

http://www.antlr.org/

インストール

http://www.antlr.org/download.html
ここからantlr-4.1-complete.jarをダウンロードしてくる

http://www.antlr.org/wiki/display/ANTLR4/Getting+Started+with+ANTLR+v4
に従ってセットアップする。
うちはWindowsなので以下のようなバッチファイルを作る

antlr.bat
set CLASSPATH=.;.\lib\antlr-4.1-complete.jar;%CLASSPATH%

java org.antlr.v4.Tool %*
run.bat
set CLASSPATH=.;.\lib\antlr-4.1-complete.jar;%CLASSPATH%

java org.antlr.v4.runtime.misc.TestRig %*

Example

Hello.g4
// Define a grammar called Hello
grammar Hello;
r  : 'hello' ID ;         // match keyword hello followed by an identifier
ID : [a-z]+ ;             // match lower-case identifiers
WS : [ \t\r\n]+ -> skip ; // skip spaces, tabs, newlines

サンプルのgrammarを作成してコンパイルしてみる。hello.g4のように小文字になってるとエラーになるので注意!

$ antlr Hello.g4
$ javac Hello*.java

構文木を生成してみます

$ grun Hello r -tree
hello parrt
^Z
(r hello parrt)

^ZはControl-Zを入力してEnter
unix系なら^D
(r hello parrt)が出力です
LISPっぽく構文木が表現されています