PL/I アプリケーションは、複数のコンパイル単位から構成される場合があります。 各コンパイル単位を別々にコンパイルしてから、結果のオブジェクト・ファイルをリンクして、アプリケーション全体を作成する必要があります。
コンパイル単位は、1 つのメイン・ソース・ファイルと任意の数のインクルード・ファイルから構成されています。 インクルード・ファイルは、コンパイル時にメインプログラムに実際に組み込まれるため、別々にコンパイルすることはしません。 コンパイラーでは、ソース・ファイル名またはインクルード・ファイル名に DBCS を使用することは許されていません。
%PROCESS ステートメントまたは *PROCESS ステートメントを必要とするプログラムの場合、同ステートメントは、ソース・ファイル内の 1 番目の行に置く必要があります。ブランク行やコメント行を除いて、そのステートメントの後の最初の行は、PACKAGE ステートメントまたは PROCEDURE ステートメントにする必要があります。ブランク行やコメント行を除いて、ソース・ファイルの最終行は、PACKAGE ステートメントまたは PROCEDURE ステートメントと対になる END ステートメントにする必要があります。
以下の例では、ソース・ファイルを正しくフォーマット設定する方法について示します。
%PROCESS ; %PROCESS ; %PROCESS ; /* optional comments */ procedure_Name: proc( ... ) options( ... ); ... end procedure_Name;
*PROCESS ; *PROCESS ; *PROCESS ; /* optional comments */ package_Name: package exports( ... ) options( ... ); ... end package_Name;
コンパイルするソース・ファイルは、*PROCESS ステートメントで区切られた複数のプログラムから構成できます。*PROCESS ステートメントの最初のセット以外はすべて無視され、コンパイラーは、最初のプロシージャーの前に PACKAGE EXPORTS(*) ステートメントがあると仮定します。
追加の PL/I ファイルは、コンパイル単位内の指定したポイントに、%INCLUDE ステートメントを使用してインクルードすることができます。%INCLUDE ステートメントの構文については、PL/I 言語解説書を参照してください。
ストリングを使用してインクルードするファイルを指定すると、コンパイラーによって、使用したストリングで指定した名前とまったく同じ名前のファイルが検索されます。より伝統的な PL/I のいずれかの方法を使用し、ddname と member name または member name のみを用いて、インクルード・ファイルを指定すると、ファイル拡張子が、コンパイラーによって、member name に追加されます。
メンバー名に追加されるファイル拡張子は、INCLUDE コンパイラー・オプションを使用して指定できます。例えば、INCLUDE(EXT(CPY)) と INCLUDE オプションを指定した場合、コンパイラーは、以下のいずれかのステートメントを認識すると、ファイル member.cpy をインクルードしようとします。
コンパイラーは、以下の順序で、上記のファイルを検索します。
INCLUDE コンパイラー・オプションに複数の拡張子を指定した場合、コンパイラーは、上記のディレクトリーのすべてを、1 番目の拡張子を使用して、次に、2 番目の拡張子を使用して、すべてのディレクトリーをというように検索していきます。
%LINE ディレクティブは、デバッグ用に生成されたメッセージおよび情報の中で、その次の行を指定された行およびファイルとして取り扱うように指定します。
%LINE ディレクティブが認識されるためには、文字 '%LINE' が、入力行の 1 列から 5 列に存在する必要があります (また、反対に、この 5 文字で始まる行はすべて、%LINE ディレクティブとして取り扱われます)。line-number は 7 桁以下の整数値とし、file-specification は引用符で囲んではいけません。 セミコロンの後に指定された文字はすべて、無視されます。
このような行が、実際にどのような外観をしているかは、オプションの PPTRACE MACRO や MDECK を使用してプログラムを コンパイルすると分かります。