bison,flexをvc8で使う

真面目にソースからコンパイルしようとしたものの,VC8ではコンパイルが上手く通せず泣けてきたのでProject GnuWin32 (via flex / bison はじめて8時間以内FAQ)から,bisonとflexをダウンロードする.

(別の環境のVC6ではそこそこ簡単にコンパイルできた…)

bisonの吐き出すコードはshare/bison/yacc.cと自分のxxx.yの合成なので,コンバートして出てきたコードがコンパイルできない場合は,適当にyacc.cを書き換えればよかったのだが,flexのやつは中にコードを内蔵してるらしく,どこでカスタマイズしていいのか判らなかった.

ので,強制手段で吐き出したコードにsedで無理やり改変を加えてみた.
変換の内容は以下の通り,

s/unistd\.h/io\.h/g
s/extern int isatty/\/\/extern int isatty/g
s/\(yy_c_buf_p - yytext_ptr\)/(int)(\1)/g

issattyがunistd.hじゃなくてio.hに入ってるのと,無駄にプロトタイプ宣言をしてるのを弄る.
3つ目はポインタの差をint型に代入してるので,c風キャストで警告を止める.

あと,バッファーオーバーランの警告が煩いので,#pragma warning(disable: 4996)もくっつけてみた.そのうちここもsedで改造を加えねば.


また,ヤバいコードを書いてしまった…