tiger bookに再度挑む

smlのコードをScalaに素直に移植していけばと思っていたのですが、
字句解析器ジェネレータとパーサジェネレータが前提。
そして、Scalaにはyaccやlexの実装がない。
パーサコンビネータはあるけど、移植に手間がかかること請け合い。
うー、Javaの実装もあるから、これ使おうかなぁ?
SMLはOCaml以上によくわからんのだよなぁ。
むぅ、と悩んで面倒になってやめてしまってました。
前回は、、、。

今回は、mincamlではjflexとbyaccを使って切り抜けたので、Javaで行きます。
Scalaで動くようにするために、javaで動くパーサが有ればなんとかなるはずなのです。
ということで、jlexとjava_cupなる字句解析ジェネレータとパーサジェネレータを拾ってきて、コンパイルして
ビルドして、1つくらいの要素しか定義されてないので字句だけ適当に動くようにして見ました。
jflexとbyaccじゃなくて、jlexとjava_cupです。なんだって、こうあっちこっちの処理系を使わならんのだ?
って思いますけど、しかたありません。

call javac ErrorMsg/ErrorMsg.java
call javac Parse/sym.java
call javac Parse/Lexer.java
call java JLex.Main Parse/Tiger.lex
move Parse\Tiger.lex.java Parse\Yylex.java
call javac Parse/Yylex.java
call javac Parse/Main.java

こんな、batファイルでパーサが動くところまでは来ました。
字句解析は一個ずつ自分で書きました。

ここ移行愚痴になっております。

で、文字列内のエスケープシーケンスどうこうはめんどいので飛ばしました。
いや、一回前書いたことあるのでいいよ後でってかんじで。
なにがタイガーブック嫌かって、動くソースがないこと。これじゃ、辛いっす。
なんで、俺がタイガー言語作らないといけないんだよ、、、。
だいたい、字句解析とかパーサジェネレータとか俺はいらんのだよ。
なんだって、わざわざ、字句解析やらパーサを作るだけで、いちいち、謎のツールをつかわないといけないんじゃ!
くそっ!どうせ、高速化したかったら後で手がきするんだし。
と、思考がループしてなかなか前に進めませんw
あと、愚痴ってますが、素晴らしい本ですタイガーブックは。
難しいやら手間がかかるやらで愚痴もでてくるんでしょう。
いや、しかししんどい。


タイガーブックまとめ

著者 (Appel) によるサポートページ
http://www.cs.princeton.edu/~appel/modern/ml/
http://www.cs.princeton.edu/~appel/modern/java/

タイガーブック読んでる人
http://code.google.com/p/tiger-compiler/
http://www.math.sansu.org/u/pwplus/index.php?TigerBook

tigeramd64コンパイルする実装
http://tiger64comp.svn.sourceforge.net/viewvc/tiger64comp/