複数のプリプロセッサ

同じ原始プログラムで複数のプリプロセッサを同時にアクティブにできます。 これらのプリプロセッサはスタックに配置されます。コンパイラがスタックの最上部にあるプリプロセッサを呼び出し、それがまた次のものを呼び出し、スタックの最下部に置かれているプリプロセッサへと順に呼び出していきます。スタックの最下部に置かれているプリプロセッサが実際にソースコードを読み込みます。 読み込まれたソースの各行はスタックの最上部にあるプリプロセッサへと、すべてのプリプロセッサに順に渡されて行き、最後にコンパイラに渡されます。 このスタックによる呼び出しを正しく機能させるには、プリプロセッサはさらにいくつかの規則に従う必要があります。

コンパイラは、最初にプリプロセッサを呼び出すときに指令をコマンド行に書き込みます。 プリプロセッサはこのコマンド行を読み取り、PREPROCESS 指令を見つけると、この指令で指定されたプリプロセッサを呼び出します。 また、この指令に続くすべてのパラメータをコマンド行に書き込むことで、呼び出したプリプロセッサにすべてのパラメータを渡し、上記で説明したハンドシェーキングプロセスを継続します。

コンパイラへのプリプロセッサ指令が ENDP 指令 (または行の終わり) で終了すると、指令ファイルには複数の PREPROCESS 指令がすべて同じ行に記述されます。

2 つのプリプロセッサ間のインターフェイスは、上記で示したコンパイラとプリプロセッサ間のインターフェイスと同じです。このため、スタック可能なプリプロセッサをスタックに置いて使用することも、スタックに置かないで使用することもできます。 スタックに配置できるように記述されていないプリプロセッサは、スタックに配置しないで、ソースコードを直接読み込むように指定します。

ほとんどの場合には、プリプロセッサは 特定の構文セットに基づいて動作し、有効な COBOL の構文を生成します。そこで、複数のプリプロセッサが同じ特定のソース行の処理を要求することはほとんどありません。 ただし、スタック内の複数のプリプロセッサが異なる言語レベルをもっていて、ソース行がスタック内の複数のプリプロセッサを経てコンパイラへと渡される過程で異なるプリプロセッサによって複数回処理される可能性があります。 この場合は、応答フィールドの情報を読む際には、元のソースコードと最後にコンパイラに渡されるソースコードの間の関係が保たれるように注意する必要があります。 また、あるプリプロセッサによって変更されたコードが次のプリプロセッサによって適切に修正されるように、スタックにプリプロセッサを配置する順序を決定する必要があります。