[R&D] RenderMan SL compiler in Haskell + Parsec has been started

by syoyo

http://github.com/syoyo/lucille/tree/master/rnd/HaskellRSLCompiler

Finally I’ve decided to start writing (posibbly full) RSL compiler in Haskell + Parsec + LLVM.

At this point, only matte.sl shader can be parsed correctly by the compiler 😉
Just letting you know, more on later.

[Ja]

そろそろ RSL シェーダコンパイラも本気で書き始めることにしました.
今まで実験的だったり簡単な RSL コンパイラは書いたことがあるのですが、
それらのコードを今見てみるとどうも気に入らないし、将来に渡ってずっと保守できる気もしない.

なので、しっかりした RSL コンパイラを作るために,
Bison&Yacc, ANTLR, PLY(python), BNFC, peg, re2c&lemon, etc
などの使い勝手を調べていたのですが、結局のところは、Haskell + Parsec で行く事にします.

Parsec(パーサコンビネータ)でパーサを書くのは最初は冗長に感じられましたが、
慣れてくると結構使いやすいと思います.
今は Parsec は GHC にデフォルトで含まれているのでインストール不要というのも利点ですね.

んで、最適化やネイティブコードへの変換は LLVM で.

とりあえずは matte.sl シェーダがパースできるくらいですが、
最低限の部分はパースできるようになってので告知してみました.

こんな感じにシェーダコードをパースできるという状況です.

今はまだまだ足りない部分が多いけど、
Parsec で手続き型プログラムのコンパイラを作りたいというひとは、
これからソースツリーを追ってもらうとコンパイラ作成の参考になるかもしれません.

OoO 5th でも、時間があればここらへんの話をしたいと思います.

いずれは Haskell で Scheme コンパイラを書くチュートリアル Write Yourself a Scheme in 48 hours の RSL 版みたいなのにまとめられるとよいかなと思っています.
(しかし Write yourself … のサイト、よく落ちているみたいで最近はぜんぜんつながりません…)

Advertisements