m 4コマンド

5447 ワード

m 4コマンド
用途
ファイルを前処理し、マクロ定義を拡張します.
構文
m4 [ -e] [ -l ] [ -s ] [ -B Number ] [ -D Name [ =Value ] ] ... [ -H Number ] [ -I Directory ] [ -S Number ] [ -T Number ] [ -U Name ] ... [ File ... ]
説明
m 4コマンドは、Cおよび他の言語の前処理プログラムのマクロ処理プログラムとして使用される.内蔵マクロまたはユーザー定義マクロを処理できます.
各Fileパラメータを順番に処理します.Fileパラメータが指定されていない場合、または-(ダッシュ)がファイル名として指定されている場合、m 4コマンドは標準入力を読み出します.処理されたマクロを標準出力に書きます.マクロ呼び出しには、次の形式が使用されます.
 
macroname(argument . . . )

左かっこはmacronameに続く必要があります.左かっこに定義されたマクロ名が付いていない場合、m 4コマンドはパラメータなしのマクロコールとして読み込みます.マクロ名は、ASCII文字、数値、および_(下線)文字の構成.拡張文字はマクロ名に表示できません.最初の文字は数値にできません.
パラメータを収集する場合、m 4コマンドはマクロ名の先頭に引用符を付けないスペース、タブ、改行を無視します.文字列を一重引用符で囲みます.括る文字列の値は、引用符を消した文字列です.
m 4コマンドがマクロを識別すると、一致する右かっこを検索するようにパラメータが収集されます.指定されたパラメータがマクロ定義より少ない場合、m 4コマンドは定義の最後に現れるパラメータが空であると判断します.パラメータを収集する過程で、マクロ評価処理は正常に行われます.ネストされた呼び出し値のすべてのカンマまたは右かっこが単語ごとに変換されます.エスケープ文字や引用符は必要ありません.パラメータを収集した後、m 4コマンドはマクロの値を入力ストリームに戻し、再度スキャンします.
内蔵マクロ
以下の内蔵マクロは、m 4コマンドで使用できます.再定義できますが、元の意味が失われる可能性があります.これらのマクロの値は、特に説明がない限り空です.
define(Name,NewName)
マクロNameを値NewNameで置き換えます.NewName文字列は$n..(nは数値です).この場合、置換テキストにnが表示される各箇所はNameのn番目のパラメータで置換されます.$0はマクロ名です.空の文字列は、空のパラメータを置き換えます.パラメータの数は$#に置き換えられます.カンマで区切られたすべてのパラメータのリストは$*を置き換えます.$@$*と似ていますが、各パラメータは現在の引用符で囲まれています(changequoteを参照).
undefine(Name)
Nameの定義を削除します.
defn(Name . . . )
囲まれたName定義を返します.
pushdef(Name, NewName)
Defineのように、NewNameを使用してNameを再定義しますが、以前の定義は保存されます.
popdef(Name . . . )
Nameの現在の定義を削除し、存在する場合は以前の定義に戻ります.
ifdef(Name,True,[False])
名前が定義され、0でない場合にのみTrueを返します.そうでない場合はFalseを返します.Falseがサポートされていない場合は、その値は空です.
shift(Argument . . . )
最初のパラメータ以外のすべてのパラメータを返します.他のパラメータは引用符で囲まれ、カンマで区切られて戻ります.引用符を付けると、その後の追加スキャンが無効になります.
changequote(L,R)
引用符を記号LとRに変更します.シンボルは5バイト長であってもよい.パラメータなしのchangequoteは元の値(`')を復元します.
changecom(L,R)
デフォルトの左アノテーションタグ(#)と右アノテーションタグ(改行)をLとRに変更します.パラメータを持たない場合は、アノテーションメカニズムを無効にします.パラメータを持つと、左のコメントタグがこのパラメータになり、右のコメントが改行文字になります.2つのパラメータがあり、両方のタグが有効です.コメントタグは、5バイト長であってもよい.
divert(Number)
現在の出力ストリームをストリームNumberに変更します.出力ストリームは10個あり、番号は0-9です.最終的な出力は、アルファベット順に接続されたストリームです.最初は、ストリーム0は現在のストリームです.m 4は、0−9とは異なるストリームへの出力を廃棄するように命令する.
undivert(Number . . . )
指定した転送(またはパラメータがない場合はすべての転送)の直接テキストから出力します.テキストは別の転送に転向しない可能性があります.転向したテキストの破棄をキャンセルします.
divnum
現在の出力ストリームの値を返します.
dnl
次の改行の前(次の改行を含む)の文字を読み込み、破棄します.
ifelse([String1,String2,True,[False]] . . . )
String 1とString 2が同じ場合、この値はTrueになります.異なるパラメータまたは4つ以上のパラメータがある場合、m 4コマンドは、追加パラメータ(4、5、6、および7)の処理を繰り返す.それ以外の場合、値はFalseまたはNULLです(False値がない場合).
incr(Number)
は、プラス1のパラメータ値を返します.
decr(Number)
は、マイナス1のパラメータ値を返します.
eval(Expression[,Number1[,Number2]])
32ビット演算を使用して、算術式の最初のパラメータとしての値を求めます.演算子+、-、*、/、%、^(乗算)、1ビット幅&、|、~および^関係演算子、カッコを使用できます.Cでは8進数と16進数を指定できます.Number 1は、式の結果のベースを指定します.デフォルトベースは10です.結果の最小数値を指定するには、Number 2を選択します.
len(String)
Stringでバイト数を返します.
dlen(String)
Stringで表示可能な文字数、すなわち2バイトの拡張文字を表示可能な文字としてカウントします.
index(String1,String2)
文字列String 1の文字列String 2の開始位置(原点0)を返します.2番目のパラメータが表示されない場合は-1です.
substr(String,Position, [Number] )
Stringのサブストリングを返します.ステータ列の開始をPositionで選択し、Numberはサブ列の長さを表す.Numberパラメータがない場合、サブストリングには最初の文字列の最後のすべての文字が含まれます.
translit(String,From,To)
Stringの文字をFromから与えられたセットからToから与えられたセットに直訳する.省略は許可されません.2バイトの拡張文字は、対応する置換文字に正しくマッピングされます.
include(File)
ファイルにアクセスできない場合は、Fileの内容を返すか、エラーメッセージを表示します.
sinclude(File)
ファイルの内容を返しますが、ファイルがアクセスできない場合はエラーメッセージは表示されません.
syscmd(Command)
Commandを実行します.値は返されません.
sysval
最後にsyscmdを呼び出す戻りコードを返します.
maketemp( . . . nnnn  . . . )
パラメータのnnnnを現在のプロセスID番号で置き換えます.
m4exit(Value)
m 4をすばやく終了し、指定した終了Valueを返します(デフォルトは0).
m4wrap(LastMacro)
ファイル終了子を読み込んでLastMacroを実行します.例えば、m 4 wrap(`cleanup()')は、m 4終了時にパージマクロを実行する.
errprint(Message)
診断出力ファイルのMessageが含まれます.
dumpdef([Name . . . ])
指定したアイテムまたはすべてのアイテム(パラメータが指定されていない場合)の現在の名前と定義を標準出力に書きます.
traceon(Macro)
Macroトレースを開きます.指定されていない場合は、すべてのマクロに対してトレースがオンになります.
traceoff(Macro . . . )
グローバルトレースと指定したMacroのトレースを閉じます.traceonで特定のトレースを使用するマクロは、traceoffの特定のコールによってのみトレースをキャンセルできます.
ひょうしき
 
-B Number
Number変数をプッシュバックおよびパラメータ収集バッファのサイズにします(デフォルトは4096).
-e
インタラクティブな操作.割り込みは無視され、出力はバッファされません.
-H Number
Number変数をシンボルテーブルハッシュ配列のサイズにします(デフォルトは199).この大きさは素数でなければなりません.
-I Directory
(大文字i)まずDirectory変数を検索し、標準リストのディレクトリで/(スラッシュ)で始まる名前のないマクロを含むファイルを検索します.
-l
(小文字L)アセンブラの行番号出力(.xline...)を有効にする.
-s
Cプリプロセッサのライン同期出力(#line....)を有効にする.
-S Number
Number変数を呼び出しスタックのサイズにします(デフォルトは100スロット).マクロは3スロット、マクロ以外のパラメータは1スロットです.
-T Number
Number変数をタグバッファのサイズにします(デフォルトは152バイト).
前のフラグは、ファイル名および-Dまたは-Uフラグの前に表示する必要があります.
-D Name[=Value]
Name変数をValue変数として定義します.Value変数を指定しない場合、Name変数は空です.
-U Name
以前-Dフラグで定義されていたName変数の定義を解除します.
終了ステータス
このコマンドは、次の終了値を返します.
0
終了しました.
>0
エラーが発生しました.
m 4 exitマクロを使用する場合は、入力ファイルから終了値を指定できます.

m 4コマンドでC言語プログラムを前処理してコンパイルするには、次のように入力します.
 
m4 prog.m4 > prog.c
cc prog.c

ファイル
 
/usr/ccs/bin/m4
m 4コマンドが含まれます.
関連情報
AIX 5 L Version 5.2 General Programming Concepts:Writing and Debugging Programsのm 4 Macro Processor Overview.
『AIX 5 L V 5.2システムユーザーズガイド:オペレーティングシステムとデバイス』の『コマンド概要』.