くまりゅう日記

もっと過去の日記
[.NET | BeOS | Blender | COLLADA | fossil | mono | monotone | NPR | OpenGL | PeerCastStation | Riko | Ruby | Silverlight | TRPG | XNA | ゲーム | ゲーム作り | プログラム | | 模型]

2010-06-22

_ [Ruby] GLSLパーサ作り続き

GLSLパーサ。というかプリプロセッサ。まだプリプロセッサやってんのかよ!

ifディレクティブの式はパース時に構文木にしちゃった方がいいわーと頑張ってたんだが、まあなんとなく出来た気がするんだが、評価前にはマクロ展開しないといけなくて、マクロ展開は当然パース後なわけで、展開されたマクロは当然構文木じゃなくただのトークン列なわけで…じゃあマクロ展開してから解析しないと評価できねーじゃん!!

…元に戻すか。

式の部分はトークン列のままにしといて、マクロ展開してからあらためて文法解析しないとだめね。

プリプロセッサめんどくせーなー。

ということはTreetopに文字列じゃなくてトークン列渡せるように改造もしないといけないのか。いつかはやることだったけどめんどくせーなー。

どこいじればいいんだっけ?Treetop::Runtime::CompiledParser#has_terminal?と、Treetop::Compiler::Terminal#compileか。

調べてたらcitrusってのがあった。似たような感じだけど、こっちの方がシンプルでいじりやすそう。

ただしcitrusはcitrusファイルを読み込んだら即時evalしか出来なくてrubyコードに変換しておくのができないようだ。まあそこは必要になってから作ればいいかな。

ちょっとcitrusいじってみよう。


ページのトップへ | トップ «前の日記(2010-06-21) 最新 次の日記(2010-06-26)» | 編集 | kumaryu.net by kumaryu