2008年07月16日

やっぱり byacc か

JavaScript のパーサーを書くのに bisonc++ を考えていたが、ライセンスが GPL では商用コードが書けないので 20 年以上前のソフト byacc を使うことにした。
byacc で生成したコードはメモリ管理をしっかりしないとすぐリークしてしまうのが難点である。特にエラーが発生した場合はスタックパラメータにある値を正しく捨てる方法がないため、メモリリークにつながりやすい。

もっとも1回ごとにVMを立ち上げなおす実装ならばそのような手間は必要ない。多少のメモリリークには目をつぶり、10〜20回くらい実行したところでプロセスを落とせば良い。こういう robastness は若い方は嫌うかもしれないが...

lex の yytext は単に代入として表現されるようだ。$$ にその値が伝播することを仮定しているため、yytext を char *などと定義しておくとメモリリークを起こすことになる。
posted by みのしす at 01:16| Comment(1) | TrackBack(0) | 日記
この記事へのコメント
っていうか、yacc プログラムの中で右辺のメモリをちゃんと片付けなきゃいけない、っていうことだな。

struct * を使わなきゃ制御構造なんか渡せっこないし。
Posted by みのしす at 2008年07月16日 23:12
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/17022572

この記事へのトラックバック