プログラマは、 2つの異なる方法を用いて、 スキャナの中に直接Cのコードを含めることができます。 第1の方法は、 「定義、初期Cコード」セクション (最初の‘%%’より前の部分) にコードを含めることです。 第2の方法は、 「他のCコード」セクション (2番目の‘%%’より後ろの部分) にコードを含めることです。 どちらの場合も、 コードはそのままlex.yy.cにコピーされますので、 正当なコードでなければなりません。
第1のセクション中のCコードは以下の形式になります。
%{ C code ... %}
ここで‘%{...%}’というペアが、 Cコード・ブロックの先頭と末尾を示すために使われています。 この形式のコードと定義は、「定義、初期Cコード」セクションのどこにでも自由に記述することができます。 定義については次の節で説明します。
Cのコードが最初のカラムから始まるのでなければ、
‘%{...%}’というペアは必要ありません。
しかし普通は、
分かりやすくするために記述しておいた方が良いでしょう。
もう1つのポイントは、
#ifdef
等のように最左端のカラムから始まらなければならず、
かつ、
通常はスキャナ記述情報の先頭に置かれる必要のあるものが存在するという点です。
こうした場合、
‘%{...%}’に囲まれていないと、
Flexはそれを定義の一部であると見なすでしょう。
これが、
常に‘%{...%}’を使うもう1つの理由です。
最後の (「他のCコード」) セクション内のコードは、 そのままコピーされます。 ここには特別な宣言は必要ありません。