最終更新:2011-02-01 (火) 21:39:35 (5200d)
m4
Top / m4
http://www.gnu.org/software/m4/
機能
- テキスト置換
- パラメータ置換
- ファイルのインクルード
- 文字列操作
- 条件付き評価
- 数式表現
- システムインタフェース
- プログラマ診断
m4 の特徴
- cpp ではマクロは1行のものしか定義できないのは周知のことである。強引に長いマクロを書くことはできるが、その場合でも改行を含むことはできない。しかし、C言語では改行は本質的ではないために、これは問題にはならない。だが、改行が本質的である言語のソースの場合には、どうしても改行をマクロに含みたいケースがある。cpp はこれには対応できないが、m4 はこれに対応できる。つまり、マクロ定義の中に改行コードを含みうる。
- cpp ではトークンはC言語の定義をそのまま流用している。だから、トークンとして使えるのは [a-zA-Z_][a-zA-Z0-9_]* の正規表現で示されるシーケンスだけである。しかし、m4 は任意の文字セットをトークンとして再定義できる仕様がある。だから、トークンの定義を TeX 風に「\」で始めるとか、sh 風に「$」で始めるとか、そういうこともできる(ただし、これをするためには m4 の再コンパイルが必要だが...)。
- m4 はさまざまな置換に使える有用なの「組み込み関数」を持っている。
- しかし、それらの組み込み関数でさえ、プレフィックスによる置換の禁止を設定することができる。だから、偶然の名前バッティングを有効に回避することができる。
- さまざまな仕様が良く考えられており、再帰定義を活用することでループを実現することさえできる。