JavaScript のパーサーを書くのに bisonc++ を考えていたが、ライセンスが GPL では商用コードが書けないので 20 年以上前のソフト byacc を使うことにした。
byacc で生成したコードはメモリ管理をしっかりしないとすぐリークしてしまうのが難点である。特にエラーが発生した場合はスタックパラメータにある値を正しく捨てる方法がないため、メモリリークにつながりやすい。
もっとも1回ごとにVMを立ち上げなおす実装ならばそのような手間は必要ない。多少のメモリリークには目をつぶり、10〜20回くらい実行したところでプロセスを落とせば良い。こういう robastness は若い方は嫌うかもしれないが...
lex の yytext は単に代入として表現されるようだ。$$ にその値が伝播することを仮定しているため、yytext を char *などと定義しておくとメモリリークを起こすことになる。
2008年07月16日
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/17022572
この記事へのトラックバック
http://blog.sakura.ne.jp/tb/17022572
この記事へのトラックバック
struct * を使わなきゃ制御構造なんか渡せっこないし。