複数のプリプロセッサ

注:

この統合プリプロセッサはネイティブ COBOL 用にのみサポートされます。

1 つのソース プログラムは、複数のプリプロセッサで並行して処理することが可能です。これらのプリプロセッサは階層型に構成されます。つまり、コンパイラが最初のプリプロセッサを呼び出すと、そのプリプロセッサが次のプリプロセッサを呼び出し、さらに呼び出されたプリプロセッサから下位のプリプロセッサが順次呼び出されます。ソース コードを実際に読み取るのは、最後に呼び出された最下位のプリプロセッサです。このプリプロセッサが読み取ったソースが、行単位で上位の各プリプロセッサに順次渡され、最終的にコンパイラに渡されます。ただし、この仕組みを正しく機能させるには、いくつかのルールに従う必要があります。

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

コンパイラに渡されるプリプロセッサ指令は、ENDP 指令または行の末尾によって終了します。そのため、複数の PREPROCESS 指令を指令ファイル内で指定して渡す場合は、各指令をすべて同じ行に記述する必要があります。

プリプロセッサ間のインターフェイスは、プリプロセッサとコンパイラ間のインターフェイスと同様であり、階層的な呼び出しに対応しているプリプロセッサは、対応していないプリプロセッサとも組み合わせて使用できます。階層的な呼び出しに対応していないプリプロセッサは階層の最後に呼び出し、ソース コードを直接読み取らせます。

CP プリプロセッサの上位で別のプリプロセッサを呼び出す場合、条件付きコンパイルのサポートを有効にするには、次のサポートが必要です。

ほとんどの場合、プリプロセッサは別個の構文の組に従い、有効な COBOL 構文を生成します。そのため、一部のプリプロセッサに特定のソース行を渡す必要が生じることはまずありません。ただし、複数のプリプロセッサを階層的に使用し、各プリプロセッサでそれぞれ異なる言語水準を処理する場合は、ソース行がコンパイラに渡されるまでの間に、異なるプリプロセッサによって数回にわたって編集されます。そのような場合は、オリジナルのソース コードとコンパイラに渡されるコードとの整合性を維持するためにも、応答項目で返される情報を正しく管理する必要があります。さらに、1 つのプリプロセッサが修正したコードが次のプリプロセッサでも正しく修正されるように、プリプロセッサを呼び出す順序にも注意を払うべきです。