lex


lex

lex(レックス)はレキシカル・アナライザ(字句解析プログラム、字句解析器)を生成するプログラムである。
パーサージェネレータ(構文解析プログラム生成)プログラムである
yaccとともに使用されることが多い。lexはEric SchmidtとMike Lesよって書かれ
unixおける標準のレキシカル・アナライザとなっており、POSIX標準ともなっている。
lexと同等の機能を有するGNU版としてflexがある。

lex のファイル構造

lexのファイル構造は意識的にyaccのそれに似せて定義されている。
ファイルは3つの部分に分割されており、それぞれ定義領域、規則領域、Cコード領域である。
各領域はパーセント記号2つ(%%)のみを含んだ行で区切られる。

定義領域は正規表現を用いてマクロを定義するところであり、
かつCのヘッダーファイルを取り込む場所でもある。

規則領域は最も重要な領域でありCの命令との関連付けを行う。
lexの規則と一致するパターンがあるとそれに関連付けされたCコードを実行する。

Cコード領域には生成したソースにそのままコピーされるCの命令や関数が含まれている。
これらの命令は規則領域での規則により呼ばれたコードを含む場合もある。
大規模なプログラムではここに分割して置き
コンパイル時にリンクするほうが便利である。