Wiki文法パーサ
やることが整理されたので、ひとつひとつ片付けていこう。
まず、なんでパーサが書きづらいかを考えてみよう。
例えば、はてな風に
*hoge
を
<h1>hoge</h1>
に変換するとする。
ほいで、こうすると行頭の"*"は特殊な意味をもつ。でも、行中の"*"は別になんの意味も持たない。で、これをlex/yaccで実装する方法が思いつかないわけだ。
じゃあ、それを直接書いてやろう。
head : STAR line eol eol : EOL /* \nのこと */ | EOF line: chars eol chars: char | char chars char : STAR | CHAR
ふむ、3つほどshift/reduce conflictが起きてる。でも、動いてるみたいだし、とりあえず後回しで。