RPG

243. コンパイル・リストのインデント表示

文書化するときに段落の字下げを行うことをインデントというが
多くの人もインデントについてはご存知であろう。

ところで RPG は元々書く位置が決められていて仕様書の升目に命令を埋め込む、
という形式で記述されていた。
このように記述する欄の位置が決められているのは RPG だけであろう。
COBOL, VB, VC C, Java, REXX, CLP どれをとっても自由形式での記述が可能であり、
演算命令は 28桁目からと決められている言語はない。
RPG も今では自由形式( FREE FORMAT)の記述が可能であるし、
米国雑誌を見ると逆に固定形式での記述のサンプル・ソースはひとつもなく
今ではすべてフリー・フォーマットで書かれた RPGソースを掲載している。
ところがわが日本国内では以前として固定定式での記述が圧倒的に多く、
社内のソフトウェア資産も大半というか、ほとんどが固定形式で書かれている。

固定形式でも慣れてしまえばそれはそれで問題ないのかも知れないが
新たに初めて RPG を学習する人にとって固定形式のRPG の記述には抵抗と違和感があるようである。
機能的に問題がなければいいが機能的にも問題であろう、と思われるのが
IF-ELSE-ENDIF や DO-END などの構造化表現である。
構造化表現が多重になってくるとRPGソースの読み手は
頭の中で構造化されたレベルを想像しながらRPGソースを読まなければならない。
これは実に不便であってもはや機能的にも問題であるといわざるを得ない。

そこで IBM はRPGソースの文法を変えることはできなくても
コンパイル・リスト上でのインデント表示を可能にするオプションを用意しているのでここで紹介しよう。
これは文字通り RPGコンパイラーの INDENTキー・ワードの指定である。

     CRTRPGMOD MODULE(QTEMP/SMP006) SRCFILE(ASNET.USR/QRPGLESRC) INDENT('  ') 
      AUT(*ALL)

のようにして INDENT(' ') で二桁のスペースをインデントとしてコンパイルすると
コンパイル・リストは次のように 2桁のインデントをつけて出力される。

         :
237 C     TOPRRN        DO                         ENDRRN        RRN1
238 C                     SETOFF                                     
239 C                     READ                     SHOHIN            
240 C*( 終り )                                                       
241 C     *IN50           IFEQ                     *ON               
242 C                       MOVE                   'E'           EOF 
243 C                       SETOFF                                   
244 C                       SETON                                    
245 C                       GOTO                   REDEND            
246 C                     ELSE        
                           :

多重化された構造化表現で何重にも重なっている場合は
インデントしたコンパイル・リストを出力して参照すると非常にわかりやすくなる。
ぜひ今からすぐに試して頂きたい。