とうとう衝動を抑えられなくなってMacbook Airを買ってしまいました

Macbook Airいきなり再インストール中 posted by (C)まさと
デフォルトだといろいろいらないものが入っていて、ディスク食いまくりなので、いきなり再インストール中
スーパードライブを買わなかったので、無線LAN経由で再インストールしてます
無線LANで再インストールできるってすごい!!
とうとう衝動を抑えられなくなってMacbook Airを買ってしまいました

Macbook Airいきなり再インストール中 posted by (C)まさと
デフォルトだといろいろいらないものが入っていて、ディスク食いまくりなので、いきなり再インストール中
スーパードライブを買わなかったので、無線LAN経由で再インストールしてます
無線LANで再インストールできるってすごい!!
昨日はHaskell Hackathonに参加してきました
あんまり挑戦者がいなさそうなPHPで挑んでみたのですが、蓋を空けてみると3人もいてびっくり
とりあえずやったことをつらつらと書いてく
Hugs 98にparse.yがあったので、とりあえずそれを持ってくる
C言語の部分をばっさり削除 parser.y
parse.yからphpのプログラムが埋め込まれたparser.phpyを作成
y2phpy.rbというスクリプトファイルで機械的に作った
これをkmyaccにかければ、parser.phpができる
字句解析は面倒なので、phpのtokenizerを使いました
phpのtokenizerを使うとphpのプログラムの字句解析を簡単に行う事ができます
もちろんこれはhaskell用ではないので、完全ではありませんが大体うまくいきました
うまく行かない部分は無理矢理処理してやるということで
字句解析と構文解析はできるようになったので、この時点でサンプルプログラムをいくつか通してみる
インデントのないプログラムはうまくいくんだけど、インデントのあるプログラムがパースエラーになってしまう ><
実はこれがオフサイドルールだということを知りました
構文解析と字句解析の間でなにやら処理をしないといけないみたいですね
今回はやらないってことで無視しました
別にPHPパーサの処理系を書いてきたので、それを流用してクラスをいろいろ追加
なんとかここまできて、プログラムの解析はできるようになってきたけど、Hugs 98のparser.yが複雑でどこから手をつけていいか、全然わかりません
そりゃちゃんとしたHaskellの処理系のyaccなんだから当たり前なんだけど
どうにかして、次のような簡単なプログラムの実行にこぎつけました
main = print (1 + 2 * 3 + 4 * 5 * 6)
実際に実行してみた結果は「390」
あれっ?これ間違ってるじゃん、と思ってよくよく考えてみると演算子の優先順位が全然考慮されてない
確かにyaccのファイルを見ると演算子の優先順位って定義されてない
Haskellは演算子の優先順位を変更する事ができるので、構文定義では演算子の優先順位を定義してない模様
どうやって解決すればいいか、検討もつかないので放置
Haskellも関数型言語もよく知らないのに、参加してみたけど、やっぱり周りのレベルが超たけー
いつもとは違う新鮮な感じでとても良い刺激になりました
開催してくれた、yukoba, amachang, nishio、ありがとうございます!!
全然できてないけど一応僕が作った奴は公開しておきます