lex 置換文字列の定義

lex プログラムが字句解析プログラムの生成時に展開する文字列マクロを定義することができます。

これらのマクロは、lex 仕様ファイルの最初の %% 区切り文字より前に定義します。 このセクション内で、カラム 1 から始まって、%{ %} の間にない行は、すべて lex 置換文字列を定義します。 置換文字列の定義の一般的フォーマットを次に示します。
name                     translation

ここで、nametranslation は少なくとも 1 つのブランクまたはタブで区切られ、指定される名前は先頭が英字です。 lex プログラムは、仕様ファイルの規則部分で {} (中括弧) で囲まれた name を見つけると、 その名前を translation で定義された文字列に変更し、 中括弧を削除します。

例えば、DE の名前を定義する場合は、次の定義を仕様ファイルの最初の %% 区切り文字の前に置きます。
D           [0-9]
E           [DEde][-+]{D}+
その後、これらの名前を仕様ファイルの規則セクションで使用して、 規則を短くします。
{D}+                             printf("integer");
{D}+"."{D}*({E})?                |
{D}*"."{D}+({E})?                |
{D}+{E}                          printf("real");
次の項目を定義セクションに組み込むこともできます。
  • 文字セット・テーブル
  • 開始条件のリスト
  • 大きいソース・プログラムを入れるための配列のサイズの変更