*目次 [#qdd2518b]
#content
#contents

*趣旨 [#ia584f6a]
寝る前に、眠くなるまで

つれづれなるままにANTLR4を独学する

*はじめに [#w690b0fa]
久しぶりに、ANTLRをやってみたくなった。

ANTLR3もくわしくわからなかったのだが、

ANTLR4では、ビジターにアクションを書くように思想が変わったそうだ。

英語のわかる人は、是非このツールの使い方を翻訳していただきたいとおもいます。



*目標 [#n3c729fb]
もう、寝る時間なので、四則演算のチュートリアルができたらいいな。

*インストール [#zf49247e]
新しいのを入れてみようと思う。
今は、2014/04/30 です。

**URL [#ha074472]
http://www.antlr.org/download.html

下記のをダウンロードしてみました。

Complete ANTLR 4.2.2 Java binaries jar


*Getting Started [#p7703d46]
*チュートリアル(Getting Started with ANTLR v4) [#q0621120]
次のステップということで

Getting Started with ANTLR v4

を見てみる。

アドレスは

https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Getting+Started+with+ANTLR+v4


**だが断る [#o1dd46cf]

クラスパスに通すやり方が書いてあるが、コマンドラインベースのやり方が書いてある。

自分はエクリプスを使ってやりたい。そんなお年頃。

クラスパスの設定は、エクリプスのビルドパスを通すってことで代用できるはず。

エイリアスの指定は、クラスをそのまま指定して、mainメソッドを呼べばいいじゃん。

 public static void main(String[] args) {
    org.antlr.v4.Tool.main(args);
 }

こんな感じでやることにする。

 ANTLR Parser Generator  Version 4.2.2
  -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

となった、オプションだらけじゃん。英語だし。

これをラップして設定メソッドに日本語のコメントを書いておいたほうが、日本人にやさしいと思うの。

encodingオプションの例に、euc-jpとあるあたりが、日本への愛を感じる。


**Helloをやってみる [#j06e9215]

チュートリアルにつきものであるといっていい、Helloが用意されている。

これをやってみる。ことにする。

プロジェクト直下にresourceというフォルダを作って、

そこに

https://theantlrguy.atlassian.net/wiki/display/ANTLR4/Getting+Started+with+ANTLR+v4

にある

Hello.g4

を入れてみた。

それと、あとでわかるんだが、これを実行すると、ファイルがたくさん出てきてしまうんだが、あらかじめ場所をきめておいたほうがいい。

だからここではパッケージ名にantlr.サンプル名を作成することにする。





エクリプスでやるなら次のような感じで実行してみるといい。

 public static void main(String[] args) {
     String[] argList = {"./resource/Hello.g4","-o" ,"./src/antlr/hello","-package","antlr.hello"};
     org.antlr.v4.Tool.main(argList);
 }

実は、はじめ、チュートリアル通りにやってみようとおもって

 String[] argList = {"./resource/Hello.g4"};

としていたんだ。

するとプロジェクト直下に、いろいろ吐き出してしまった。

出てきたソースコードにはパッケージ名も書いていない。

だから、出力先と、出力したファイルがすぐにエクリプスで編集できたらいいかとおもって、

 String[] argList = {"./resource/Hello.g4","-o" ,"./src/antlr/hello","-package","antlr.hello"};

としたんだ。


**パースさせてみる [#j476f375]

標準入力を使ってテストさせることができるようだ。

エクリプスからやるには、次のようにやればいいことがわかった。

 try {
     String[] grunArgList = {"antlr.hello.Hello","r","-tree"};
     org.antlr.v4.runtime.misc.TestRig.main(grunArgList);
 } catch (Exception e) {
     e.printStackTrace();
 }


チュートリアルはキーボード入力を使っているようだが、

gui表示のオプションを指定するとecllipseからは、ctrl + z で抜けられなかった。

しらべてみたら、ファイルでの入力もできるようだ。

ソースコードの引数をみたからわかったんだ。

入力ファイルを ./resource/hello.txtに作った。

 try {
    String[] grunArgList = {"antlr.hello.Hello","r","-gui","./resource/hello.txt"};
    org.antlr.v4.runtime.misc.TestRig.main(grunArgList);
 } catch (Exception e) {
   e.printStackTrace();
 }

これで、Helloのチュートリアルはこんな感じで終わり。

今日はこの辺でねるとする。

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS