flex & bison をやめて re2c & bison にしたらパーサが速くなった。re2c は UTF32 の入力に対応しているので非常にすっきり書けるし設計も歪まない。

re2c は flex とは互換がなく独自のマクロなどを定義しなくてはいけないので注意。サンプルとドキュメントの少ないのもマイナスポイント。

それこそ UTF32 を利用している例なんて見つけられなかった。

re2c で多分難しいのは YYFILL （flex でいうところの YYIN）を定義するところなのだけど、下に貼ったコードをほぼそのまま使えば良いと思う。（間違っていたらごめんなさい）

でも何だかんだで flex の不満点がいくつも解消されているし、速いし re2c 最高。

Parsing R6RS lexical syntax (almost)

いつか検索で誰かがたどり着けるようにコード貼っておきます。

R6RS Lexical syntax.