翻訳指令とは、COBOLコンパイラがCOBOLソースプログラムを翻訳するときに、「»」で始まる行をコンパイラに対する指令として処理する機能です。コンパイラは、本来のCOBOLプログラムの翻訳より前に、翻訳指令行の指示に基づいてソースプログラムを処理します。
翻訳指令の主な機能としては、条件翻訳があります。条件翻訳を使用すると、記述されたCOBOL原始プログラムの一部を有効、または無効にできます。このため、「プラットフォームごとの固有な処理」や「ユーザごとにカスタマイズしたい処理」などを一つのCOBOL原始プログラム中にまとめて記述できるようになり、保守性を向上させることができます。
<条件翻訳の使用例>
条件翻訳機能の一つであるIF指令(»IF)を使用した例で説明します。
(IF指令の使用例)
» IF 翻訳変数名 IS DEFINED
(COBOLソース行A)
»ELSE
(COBOLソース行B)
»END-IF
ここで記述した「翻訳変数」とは、本来のCOBOL原始プログラム中で使用する変数ではなく、翻訳指令だけに有効となる変数です。 翻訳変数には、既定義/未定義の状態があり、DEFINE指令(»DEFINE)、-Defineコンパイラオプションのどちらかで定義します。
(DEFINE指令による翻訳変数の定義)
» DEFINE 翻訳変数名
(-Defineコンパイラオプションによる翻訳変数の定義)
-Define 翻訳変数名
上記の例では、IF指令(»IF)によって、「翻訳変数名」が既定義かどうかをDEFINED条件で確かめています。その結果、次のように翻訳対象となるCOBOLソース行が選択されます。
翻訳変数の既定義/未定義 | COBOLソース行A | COBOLソース行B |
---|---|---|
既定義 | 翻訳対象 | 翻訳対象外 |
未定義 | 翻訳対象外 | 翻訳対象 |
条件翻訳には、IF指令のほかに、多分岐を扱えるEVALUATE指令(»EVALUATE)もあります。