Next: , Previous: Changequote is Evil, Up: M4 Quotation


8.1.5 四文字表記

Autoconfマクロを書いているとき,標準的なAutoconfの引用符の規則で表現する ことが難しい,特殊な文字を生成する必要が生じるかもしれません.例えば, ‘[’以外の全ての文字に一致する正規表現‘[^[]’を出力する必要があ るかもしれません.この表現は,対称ではないカッコを含んでいるので,M4 マ クロの中に簡単に書き込むことはできません.

以下の四文字表記(quadrigraph)の一つを使用することで,この問題を解 決することが可能です.

@<:@
[
@:>@
]
@S|@
$
@%:@
#
@&t@
何にも展開されません.

四文字表記は,m4が実行された後,変換処理の終りの段階で置換され るので,M4の引用符の邪魔になりません.例えば,文字列‘[^@<:@]’ は, その引用符で囲まれている状態に依存せず,出力では‘[^[]’として現れま す.

空の四文字表記を使用することも可能です.

@&t@’の名前はPaul Eggertの提案です.

私は,‘@&t@’の語呂合わせに称賛を与えるべきでしょう.‘&’は私 自身の発明ですが,‘t’はSteve Bourne(Bourneシェルで有名です)によって 書かれたalgol68cコンパイラのソースコードが由来となっていて,そこで は空の文字列を示すために‘mt’を使用しています.Cでは,それは以下のよ うなものになるでしょう.
     char const mt[] = "";

しかし,ソースコードは当然Algol 68で書かれています.

彼が‘mt’を得た場所を,私は知りません.それは独自の発明かもしれませ んし,当時のケンブリッジ大学のコンピュータ研究所で,一般的な語呂合わせだっ たのかもしれません.