bison -oParser.c -d Parser.y ren Parser.c Perser.cppとします。もし、
bison -oParser.cpp -d Parser.yとすると、Parser.cpp.hというファイルが出来てしまいまって、 うまく行きません。
extern void yy_input(char*, int*, int); #define yy_input(buf, count, max) yy_input(buf, &count, max)yy_inputという関数は、unit1.cppなどで定義します。
delim [ \t\n\r]
flex -oLexer.cpp -I Lexer.lです。
  yy_input(char* buf, int* count, int max)
     buf	文字列をコピーする先
     count	実際に bufにコピーした文字数を返す。
     max	コピーしても良い最大の文字数
例えば、Memo1から文字を読む場合、
  void yy_input(char* buf, int* count, int max)
  {
    int textlength = Form1->Memo1->Text.Length();
  
    if (numberread < 0) {
      *count = 0;       /* すでに終了している */
    } else if (textlength - numberread > max) {
      memcpy(buf, Form1->Memo1->Text.SubString(numberread, max).c_str(), max);
      numberread += max;
      *count = max;     /* countに実際にコピーした文字数を返す。*/
    } else {
      *count = textlength - numberread;
      memcpy(buf,
	     Form1->Memo1->Text.SubString(numberread, *count).c_str(), *count);
      numberread = -1;  /* 終了のしるし */
    }
  }
のようになります。
bcc32 -c -DMSDOS;YY_ALWAYS_INTERACTIVE=1 Parser.cpp bcc32 -c -DMSDOS;YY_ALWAYS_INTERACTIVE=1 Lexer.cpp-cは、 分割コンパイルを指定するオプションです。 (main関数がないので、実行可能ファイルにはできません。) Parser.objと Lexer.objという名前のオブジェクト(.obj)ファイルができます。
-D...はソースプログラムの最初に #define文
#define MSDOS #define YY_ALWAYS_INTERACTIVE 1を書くのと同じ効果があります。