VC++ でlex & yacc を使う

to home
 lex(flex) & yacc(bison,byacc)を VC++から使用する手法を簡単に..
 私が使用したのは Cygwin b20 の flex と byacc です。事前にイストールして パスを通しておきます。
  1. プロジェクトに .l と .y を追加
  2. y.tab.c, y.tab.h, lex.yy.c も追加
  3. カスタムビルドを設定する
  4. ビルド
  5. 警告の抑制


  1. プロジェクトに .l と .y を追加
  2.  [プロジェクト(P)]→[プロジェクトへ追加(A)]→[ファイル(F)]を選択します。
    ファイルの種類を「すべてのファイル」にして、.l.y ファイルを選択します。


  3. y.tab.c, y.tab.h, lex.yy.c も追加
  4.  同様に lex, yacc が生成する必要なソースもプロジェクトに挿入します。
    プロジェクトに挿入しやすいように予め、ソースは生成しておいた方がいいでしょう。


  5. カスタムビルドを設定する
  6.  [プロジェクト(P)]→[設定(S)] から「プロジェクトの設定」ダイアログを開きます。
    左のペインから(例えば)yaccのソース .y を選択します。
    右のペインの「カスタムビルド」タブを選択して、以下の様に入力します(ソースファイルは tsvsplit.y)。入力を補完してくれる テンプレートもありますんで適当に入力します。(以下の例はベタで書いていますが..)

     同様に lex のソース .l もカスタムビルドを設定します。

     lex.yy.c が yacc の生成する y.tab.h をインクルードしている場合は更に依存関係を設定して おきます。


  7. ビルド
  8.  ビルドを実行すると、yacc, lex が実行された後に C/C++ のビルドが実行されます。
    ただ、上記の例だと yacc のソースを変更していなくても、ビルドを実行すると yacc を実行してしまいます。 設定が足らない部分がまだあるようですが、とりあえずこれで私はやっています(苦笑)。適当な設定があれば教えて下さいm(_._)m。


  9. 警告の抑制
  10.  ビルドすると、lex & yacc の吐いたソース中で一度の参照されないラベルが 存在すれば警告となります(C4102)。
     気になるのであれば、lex & yacc のソース冒頭の %{%} の 間に次のディレクティブを挿入しておきます。
    #ifdef _MSC_VER
    #pragma warning(disable:4102)  /* warning mask ( not used label ) */
    #endif
      



    to home

    by masu
    e-mail: massun.masumoto@nifty.ne.jp
    URL : http://member.nifty.ne.jp/~masumoto/