masaki-fの日記: はまりみち
日記 by
masaki-f
とある事情で(w)rubyでパーサを書いてみることに。選択肢としては
(1) スキャナ+パーサスクラッチ
(2) スキャナスクラッチ+ありもの(RACC, ruby-yacc, etc)
(3) ありもの(tlex, rlex, ruby-lex) + ありもの(同上)
まぁどれでも大して時間は掛からない(とはいっても(1)でちゃんと書いたらちょっと大変だけど)のでさくさくっといろいろ試して見る。うーん、tlexはちゃんと動かないょ?何か間違ってるのかなぁ。ruby-lexとruby-yaccはflexとbisonのシンプルなruby-interfaceという感じなので慣れている分有利か。
というわけでフルスクラッチは置いておいて(ぉぃ)ruby-lex+ruby-yaccを試して見ました。
で。
やー、はまりましたー。超絶に。何かっていうとスキャナのルールを書くときに
"@" {
# bla bla bla...
}
とかしてたわけなんですが、なーぜーか何をどうやってもここのルールにマッチしないんですょ。ruby-lex使う方は要注意です。結局ruby-lexのソース見て"@"が{RA}という文字列にエスケープされていることが判明。なんで{RA}という入力にマッチするのだ。わらえねぇーよ。
つーわけで\x40と書いて逃げ。
あぁかれこれ1時間以上はまったです。こんなにはまったのは久々だなぁ。自分を疑いすぎたのが敗因です。でもまぁ構文もアクション処理もきわめて単純なので明日1時間くらいあれば楽勝で完成かな。とりあえず寝よう...
はまりみち More ログイン