調べ物をしていて見つけたツール。すごく軽いlexer(レキシカルアナライザ)。実装はC++だが、生成されるコードはC/C++(if文とgoto文とポインタ演算くらいしか生成しないのでどっちでもOK)。ソースコードのコメント部分に定義を書くとそこにコードが展開され、また、外部ライブラリ等も不要なので、複数のルールの記述が容易であるなど、非常に扱いやすい。
注意点は、文字列リテラルは"〜"でくくる必要があること、文字クラスに否定がないこと、エイリアスの定義時には末尾にセミコロンが必須であること。(おいらがハマっただけなんだけど^^;)
あと、YYLIMITはあくまでYYFILL(n)を呼び出す判定条件でしか使われておらず、YYCURSORの上限をチェックしてくれるわけではないため、固定文字列を終端まで連続して解析する場合、終端文字を適切に定義しておかないとバッファをぶち抜くかもしれない。
このあたりの仕様は微妙に気に入らないんだけど、終端文字で止める形でないと解析速度ががっくし落ちそう(一歩進む度にYYCURSORとYYLIMITの比較なんかしてらんない)なので、どーしたもんだか……。パッチをちょっと書いてみたけど、自分には必要ないことに気付いたし。