- 追加された行はこの色です。
- 削除された行はこの色です。
[[構文解析の記事一覧]]
*目次 [#m3639e2d]
#contents
*MacOSXでのJavacのエラーメッセージが文字化けする問題の解決方法 [#o5169508]
*趣旨 [#sc0ae109]
ANATLRについて学んだことをまとめてみる。
MacOSXでTerminal上でJavaのコンパイルをするとエラーメッセージが文字化けする。 どうやら、メッセージは、SJISで出力されているようなので、Terminal自体をSJIS設定で 使えばいいのだが、そうすると別の問題が生じるのでデフォルトのUTF-8のまま使いたい。
サンプルコードをもとに、使い方を逆引き的にまとめる
そこで、nkfを使ってメッセージをUTF-8に都度変換することにする。 nkfはfinkを使えば簡単にインストールできる。
休日にちょこっとやってみてるだけなので、飽きたらやめる
$ fink install nkf
コンソールに出力されたJavacのメッセージをUTF-8に変換するには、 次のようにする。
*インストール [#s9fb2dcf]
**ダウンロード [#se5b5826]
***URL [#p8e605ab]
http://www.antlr.org/download.html
$ javac *.java | nkf -w
普通 ant を使ってビルドするので・・・
***ダウンロード対象ファイル [#gdc6c98e]
ANTLRWorks+ANTLR
$ ant | nkf -w
で文字化けを回避できる。
ANTLR v3
*日本語のチュートリアル的サイト [#t1578c8e]
http://d.hatena.ne.jp/inabatch/20080123/1201099466
だったんだけど、プライベートモードになっていてみれなくなっていた。
内容は、英語の書籍の最初の解説と同じような感じだったはずである。
*拡張子 [#o8bd9085]
拡張子は.g
*サンプルコード [#hd6a2adf]
ファイル名がT1だとすると、
grammar T1;
と記入しなくてはならない。
*パターンマッチの書き方 [#laae5c33]
**末尾は;で終了させる。 [#b1e181a2]
**正規表現と違うのは、パターンマッチを変数として扱うことができる [#j273372b]
**単純な文字列はシングルクォートで括ることができる。 [#s07ef55a]
*マッチした文字列を出力するには [#vf9bd121]
$変数名.textで置き換えることができる。
*無視したい文字列の場合には [#pc5271fb]
{$channel=HIDDEN;}
**例 [#afb7fd3f]
grammar T1;
r : 'call' ID ';' {System.out.println("invoke "+$ID.text);};
ID : 'a'..'z'+;
WS : (' '|'\n'|'\r')+ {$channel=HIDDEN;};
*参考書籍 [#h64cf61c]
The Definitive ANTLR Reference
ISBN-10 0-9787392-5-6
ISBN-13 978-0-9787392-5-6
*Stringtemplate [#pe1e67f4]
http://www.stringtemplate.org/
ソースコード生成用のテンプレートである。
*MACの日本語環境構築 [#ca9b5cfc]
MacOS XのTerminalの標準文字コードはUTF-8。さらに、OSのフォルダなどの名前に使われているのもUTF-8。
そのため、通常のアプリケーション等は、MacOS9の頃のJISコードを使うので、Javacを使うと、Terminalで利用中は、文字化けをする。
そこで、javacをする際に、"-J-Dfile.encoding=UTF8"のオプションを付けてあげれば、問題は解決。
毎回付けるのが面倒だと言う方は、aliasに
alias javac="javac -J-Dfile.encoding=UTF8"
を追加しておく。
**NKFを導入する [#j69dec8e]
このさいだから文字コード変換用に入れておく。
いれなくてもよい。
***Homepage [#ifb3b9d2]
http://nkf.sourceforge.jp/
***Source [#i952a352]
https://sourceforge.jp/projects/nkf/
***インストール手順 [#i617943f]
参考
http://blog.marimo-net.org/item/614
$make
$make perl
$sudo mkdir /usr/local/bin
$sudo cp nkf /usr/local/bin
$cd NKF.mod
$perl Makefile.PL
$make
$make test
$sudo make install