プリプロセッサー・ステートメントは検出されたときに実行されます。 以下の処理を行うことができます。
プリプロセッサー変数を明示的に宣言しなければ、 診断メッセージが出され、変数にはデフォルト属性 CHARACTER が 与えられます。 ただし、それ以後に実行される %ACTIVATE ステートメント内にその変数を 書かない限り、その変数は置き換えのために活動化されません。 変数は、プリプロセッサー・ステートメント内で参照できます。
プリプロセッサー・プロシージャーに含まれていないリスト制御ステートメントは、 プリプロセッサー出力の中にコピーされます (各ステートメントごとに 1 行ずつ使われます)。
アクティブ ID が新しい値で書き換えられた後の入力テキストが、 プリプロセッサー出力の中にコピーされます。 無効文字 (文字定数またはコメントの一部) は、プリプロセッサー出力 内ではブランクで置き換えられます。 置き換えを行うかどうかを判別するために、 入力テキストが走査されて、下記のものが探索されます。
アクティブなプリプロセッサー変数の名前に一致する ID は、 プリプロセッサー出力内ではその変数の値で置き換えられます。
ID が、アクティブなプリプロセッサー関数 (プログラマー作成の関数でも 組み込み関数でもよい) の名前に一致したときは、そのプロシージャーが 呼び出されて、その呼び出しが、戻り値で置き換えられます。
ID を活動化するとき、RESCAN オプションと NORESCAN オプションの どちらかを指定することができます。 NORESCAN オプションが適用されていると、値がただちにプリプロセッサー 出力の中に挿入されます。 RESCAN オプションが適用されていると、再走査が行われて、その値が テストされ、その値 (または値の一部) を別の値で書き換えることができるか どうかが判別されます。 別の値で置き換えられないときは、値がプリプロセッサー出力の中に 挿入されます。別の値で置き換えることができるときは、置き換えをそれ以上 できなくなるまで置き換え処理が続けられます。 このようにして、置き換え可能なものをすべて置き換えたあとにだけ、 プリプロセッサー出力への値の挿入が行われます。
置き換わる値には、% 記号、対になっていない引用符、対になっていない コメント区切り文字などが含まれていてはなりません。
プリプロセッサー・ステートメントは、通常のテキストとは別の行に存在している必要があります。 例外が 1 つあり、それは、形式 %; で指定されたヌル・ステートメントです。 このようなヌル・ステートメントは、置換テキストと通常のテキストを連結するために使用できます。 例えば、入力テキストが次のものであったとします。
%dcl A char; %A = 'B'; dcl A%C fixed bin(31);
この場合、プリプロセッサーは次の出力テキストを生成します。
dcl BC fixed bin(31);
プリプロセッサー入力内の最後の文字を超えて走査が試みられたときに、 走査が終了します。 その時点で、プリプロセッサー出力が完成しているので、コンパイルを 開始することができます。