Hatena::ブログ(Diary)

みずぴー日記 Twitter

2008-10-06(月)

OCamlのストリームパーサーすごい

| OCamlのストリームパーサーすごいを含むブックマーク

404 Not Found

ABCのオペコードを解析するコードを書いてます。

その部分のコードはこんな感じ。

let code = 
  parser
      [< _ = op 0xc5 >] ->
      `Add_i
    | [< _ = op 0x86; index = u30 >] ->
      `Astype index
    | [< _ = op 0x87 >] ->
      `AstypeLate
    | ...

すごくね? 美しくね? 最高じゃね?

パターンマッチもすごいし、それを拡張できるCamlp4もすごいと思うんだ。

これ、YaccとかParsecよりもずっとキレいだと思うんだ。

osiireosiire 2008/10/07 09:19 いやー、ストリームパーサーでは残念ながら最初の要素しかマッチできないんだ。
c.f. http://www.jmuk.org/~mukai/camlp4tut.html
そういう意味では、オペレーションコードが重複しないようなバイトコードの解析には最適かも。

mzpmzp 2008/10/07 23:14 ええ、その制限にはだいぶ苦労してます。Parsecのtryみたいな関数があればいいんですけど・・・。

http://d.hatena.ne.jp/mzp/20080514/add

kmizushimakmizushima 2008/10/09 16:04 > あと、Scalaでコンパイルするには、objectで包まなければならないらしい。

scalac -Xscript name file.scala

とかしてやると、nameという名前のobjectでラップした
上でコンパイルしてくれるようになります。

トラックバック - http://d.hatena.ne.jp/mzp/20081006/abc