行およびソース形式

行とは、水平方向の文字配列です。 これに対して、桁は垂直方向の文字配列で、 特定の桁にあるそれぞれの文字 (マルチバイト文字の場合は各バイト) の位置は行内で 同じになります。

+----------------------------------IBM 拡張----------------------------------+

XL Fortran は、行の長さをバイト単位で表すので、 これらの定義が適用されるのは 1 バイト文字を含む行だけです。 マルチバイト文字の場合は、各バイトが 1 桁を占めます。

+------------------------------End of IBM 拡張-------------------------------+

行には以下の種類があります。


開始行 ステートメントの先頭の行です。
継続行 開始行の次行以降にステートメントを継続させる行。
コメント行 実行可能プログラムに影響を与えないので、 説明の記入に使用することができます。 コメント・テキストは行の終わりまで継続します。 複数のコメント行を次々に継続させていくことはできます が、1 つのコメント行を複数の行に渡って継続させることはできません。 行全体がホワイト・スペースの行または長さがゼロの行は、 テキストのないコメント行と見なされます。 コメント・テキストには、文字コンテキストで使用できる文字であれば、 どの文字でも入れることができます。

開始行または継続行を継続させない場合、あるいは 開始行または継続行を継続させるがその継続が文字コンテキスト内で 行われない場合、同じ行で、ステートメント・ラベル、ステートメント・テキスト、 および継続文字のいずれかに続けてインライン・コメントを入れることができます。 感嘆符 (!) は インライン・コメントの始まりを意味します。

* 条件付きコンパイル行 行がコンパイルされるのは、条件付きコンパイル行の認識が使用可能になっている場合だけであることを示します。 条件付きコンパイル標識は、条件付きコンパイル行になければなりません。 (条件付きコンパイルを参照してください。) *
* デバッグ行 その行がデバッグ・コード用であることを示します (固定ソース形式の場合のみ)。 XL Fortran では、1 桁目に D または X の文字が指定されていなければなりません。 (デバッグ行を参照してください。) *
* ディレクティブ行 XL Fortran では、コンパイラーに指示または情報を与えます (コメント形式ディレクティブを参照してください)。*

+----------------------------------IBM 拡張----------------------------------+

注:
* XL Fortran では、デバッグ行およびディレクティブ行が使用されます。

XL Fortran では、ソース入力行は、固定形式と自由形式のどちらのソース形式でもかまいません。 同一のプログラム単位内でソース形式を混在させるには、SOURCEFORM ディレクティブを 使用します。 f77fort77xlfxlf_r 呼び出しコマンドを使用する場合は、固定ソース形式がデフォルトになります。

xlf90xlf90_rxlf95、または xlf95_r 呼び出しコマンドを 使用する場合は、Fortran 90 自由ソース形式がデフォルトになります。

呼び出しコマンドの詳細については、「XL Fortran ユーザーズ・ガイド」の 『XL Fortran プログラムのコンパイル』を参照してください。

+------------------------------End of IBM 拡張-------------------------------+

固定ソース形式

+----------------------------------IBM 拡張----------------------------------+

固定ソース形式の行は、1 〜 132 文字の文字列です。 デフォルトの行サイズは (Fortran 95 に規定されているとおり) 72 文字ですが、 XL Fortran では、 -qfixed=right_margin コンパイラー・オプションを使用して変更することができます (「XL Fortran ユーザーズ・ガイド」を参照してください)。

+------------------------------End of IBM 拡張-------------------------------+

右マージンを超える列は、行の一部ではないので、識別、 順序付け、またはその他の目的に使用できます。

文字コンテキスト内でなければ、ホワイト・スペースは意味を持ちません。 つまり、ホワイト・スペースを字句トークン内または 字句トークンの間に埋め込むことができます。 このような使い方をしてもコンパイラーの それらの字句トークンの扱い方に影響はありません。

+----------------------------------IBM 拡張----------------------------------+

タブ形式設定では、 XL Fortran の開始行の 1 〜 6 行目にタブ文字があることを意味します。 これは、タブ文字の次の文字を 7 桁目から始めることを解釈するように、 コンパイラーに指示します。

+------------------------------End of IBM 拡張-------------------------------+

固定ソース形式の行における行および項目の要件は以下のとおりです。

セミコロン (;) は、文字コンテキストの中、コメントの中、 または 1 〜 6 桁目に使用した場合以外は、単一ソース行上の ステートメントを区切る役割を果たします。 同じ行に 2 つ以上のセミコロン・セパレーターがあり、 それらがホワイト・スペースまたは別のセミコロンで区切られている場合は、 単一のセパレーターと見なされます。 セパレーターが行の最後にある場合やインライン・コメントの前にある場合は、 そのセパレーターは無視されます。 同じ行の中で、セミコロンに続くステートメントに、 ラベルを付けることはできません。 同じ行の中で、追加のステートメントをプログラム単位 の END ステートメントに続けることはできません。

デバッグ行

+----------------------------------IBM 拡張----------------------------------+

デバッグ行は、固定ソース形式のみが使用可能であり、 デバッグ用に使用されるソース・コードが入っています。 このデバッグ行は、XL Fortran では、文字 D または 1 桁目の文字 X によって指定されます。 デバッグ行の処理は、コンパイラー・オプション -qdlines または -qxlines によって異なります。

デバッグ・ステートメントが複数の行にまたがっている場合は、 継続行の 1 桁目に D または X のような継続文字を指定しなければなりません。 開始行がデバッグ行でない場合でも、継続行をデバッグ行として指定することができます。 ただし、-qdlines または -qxlines コンパイラー・オプションを指定したかどうかにかかわらず、 ステートメントの構文は正しくなければなりません。

+------------------------------End of IBM 拡張-------------------------------+

固定ソース形式の例
C Column Numbers:
C        1         2         3         4         5         6         7
C23456789012345678901234567890123456789012345678901234567890123456789012
 
!IBM* SOURCEFORM (FIXED)
      CHARACTER CHARSTR ; LOGICAL X          ! 2 statements on 1 line
      DO 10 I=1,10
        PRINT *,'this is the index',I  ! with an inline comment
10    CONTINUE
C
       CHARSTR="THIS IS A CONTINUED
     X CHARACTER STRING"
       ! There will be 38 blanks in the string between "CONTINUED"
       ! and "CHARACTER". You cannot have an inline comment on
       ! the initial line because it would be interpreted as part
       ! of CHARSTR (character context).
  100 PRINT *, IERROR
! The following debug lines are compiled as source lines if
! you use -qdlines
D     IF (I.EQ.IDEBUG.AND.
D    +    J.EQ.IDEBUG)     WRITE(6,*) IERROR
D     IF (I.EQ.
D    +  IDEBUG )
D    +  WRITE(6,*) INFO
       END

自由ソース形式

自由ソース形式の行では、1 行に 132 文字まで指定する ことができ、1 ステートメントに最大で 39 までの継続行が指定できます。

+----------------------------------IBM 拡張----------------------------------+

XL Fortran では、文字数が 6700 を超えなければ、 行の長さや継続行の数を任意に指定することができます。

+------------------------------End of IBM 拡張-------------------------------+

項目は行の任意の桁位置から始めることができ、行および行に関する項目の次の要件を満たしています。

単一ソース行の複数のステートメントは、セミコロンで区切ります。 ただしセミコロンが文字コンテキスト中またはコメントに現れる場合を除きます。 同じ行に 2 つ以上のセパレーターがあり、それらがホワイト・スペースまたは別のセミコロンで区切られている 場合は、単一のセパレーターと見なされます。 セパレーターが行の最後にある場合やインライン・コメントの前にある場合は、 そのセパレーターは無視されます。 同じ行の中で、追加のステートメントをプログラム単位の END ステートメントに続けることはできません。

ホワイト・スペース

ホワイト・スペースは、字句トークン内に入れることはできません。 ただし文字コンテキスト内または形式指定内は除きます。 ホワイト・スペースは、読みやすさを向上させるために、トークンの間に自由に挿入できます。 ただし、名前、定数、ラベルを、隣接するキーワード、名前、定数、ラベルから区切るものでなければなりません。

隣接する特定のキーワード間でホワイト・スペースが必要となる場合があります。 以下の表では、ホワイト・スペースが必須であるキーワード、およびホワイト・スペースがオプションである キーワードをリストしています。


表 2. ホワイト・スペースがオプションであるキーワード

BLOCK DATA END FUNCTION END SUBROUTINE
DOUBLE COMPLEX END IF END TYPE
DOUBLE PRECISION END INTERFACE END UNION
ELSE IF END MAP END WHERE
END BLOCK DATA END MODULE GO TO
END DO END PROGRAM IN OUT
END FILE END SELECT SELECT CASE
END FORALL END STRUCTURE

type_spec の詳細については、 型宣言を参照してください。

自由ソース形式の例
!IBM* SOURCEFORM (FREE(F90))
!
! Column Numbers:
!        1         2         3         4         5         6         7
!23456789012345678901234567890123456789012345678901234567890123456789012
 DO I=1,20
   PRINT *,'this statement&
   & is continued' ; IF (I.LT.5) PRINT *, I
 
 ENDDO
 EN&
         &D              ! A lexical token can be continued

+----------------------------------IBM 拡張----------------------------------+

IBM 自由ソース形式

IBM 自由ソース形式の行またはステートメントは、 最大で 6700 文字までの文字列です。 項目は行の任意の桁位置から始めることができ、行および行に関する項目の次の要件を満たしています。

開始行または継続行上のステートメント・テキストを継続させる場合、 負符号を使用して、ステートメント・テキストが次の行に継続することを示します。 文字コンテキスト中で、継続させるステートメント・テキストの 最後の文字が負符号の場合、継続文字としてもう 1 つの 負符号を入力する必要があります。

文字コンテキスト内でなければ、ホワイト・スペースは意味を持ちません。 つまり、ホワイト・スペースを字句トークン内または 字句トークンの間に埋め込むことができます。 このような使い方をしてもコンパイラーの それらの字句トークンの扱い方に影響はありません。

IBM 自由ソース形式の例

!IBM* SOURCEFORM (FREE(IBM))
"
" Column Numbers:
"        1         2         3         4         5         6         7
"23456789012345678901234567890123456789012345678901234567890123456789012
 DO I=1,10
  PRINT *,'this is -
             the index',I   ! There will be 14 blanks in the string
                            ! between "is" and "the"
 END DO
 END

+------------------------------End of IBM 拡張-------------------------------+

+----------------------------------IBM 拡張----------------------------------+

条件付きコンパイル

XL Fortran プログラムの特定の行を条件付きコンパイルするようマークするには、 標識を使用します。 このサポートを使用すれば、SMP 環境内だけで有効なステートメント または SMP 環境内だけで必要なステートメントが入っているコードを、 非 SMP 環境に移植することができます。これを行うには、条件付きコンパイル行を使用するか、 _OPENMP C プリプロセッサー・マクロを使用します。

条件付きコンパイル行の構文は、次のとおりです。


>>-cond_comp_sentinel--fortran_source_line---------------------><
 
 

cond_comp_sentinel
現行ソース形式によって定義される条件付きコンパイル標識です。 これは、次のいずれかとなります。

fortran_source_line
XL Fortran ソース行です。

条件付きコンパイル行の構文規則は、 固定ソース形式行と自由ソース形式行の構文規則とよく似ています。 構文規則は、次のとおりです。

コードを条件付きで組み込むための別の方法 (条件付きコンパイル行を使用する 方法以外) は、C プリプロセッサー・マクロ _OPENMP を使用する方法です。 このマクロが定義されるのは、C プリプロセッサーが呼び出され、-qsmp=omp コンパイラー・オプションを 指定したときです。 このマクロの使用方法の例については、「XL Fortran ユーザーズ・ガイド」の節 『XL Fortran プログラムの編集、コンパイル、リンク、実行』の中の 『C プリプロセッサーによる Fortran ファイルの引き渡し』を参照してください。

有効な条件付きコンパイル行の例

次の例では、条件付きコンパイル行が、 OpenMP 実行時ルーチンを隠すために使用されています。 OpenMP 実行時ルーチンを呼び出すコードは、非 OpenMP 環境で 条件付きコンパイルを使用しないで簡単にコンパイルすることはできません。 実行時ルーチンに対する呼び出しはディレクティブではないので、 これらの呼び出しを !$OMP トリガーによって隠すことはできません。 以下のコードを -qsmp=omp コンパイラー・オプションを指定せずに コンパイルすると、スレッドの数を保管するために使用される変数には、 値 8 が割り当てられます。

      PROGRAM PAR_MAT_MUL
      IMPLICIT NONE
      INTEGER(KIND=8)                 ::I,J,NTHREADS
      INTEGER(KIND=8),PARAMETER       ::N=60
      INTEGER(KIND=8),DIMENSION(N,N)  ::AI,BI,CI
      INTEGER(KIND=8)                 ::SUMI
!$    INTEGER OMP_GET_NUM_THREADS
 
      COMMON/DATA/ AI,BI,CI
!$OMP THREADPRIVATE (/DATA/)
 
!$OMP PARALLEL
      FORALL(I=1:N,J=1:N) AI(I,J) = (I-N/2)**2+(J+N/2)
      FORALL(I=1:N,J=1:N) BI(I,J) = 3-((I/2)+(J-N/2)**2)
!$OMP MASTER
      NTHREADS=8
!$    NTHREADS=OMP_GET_NUM_THREADS()
!$OMP END MASTER
!$OMP END PARALLEL
 
!$OMP PARALLEL DEFAULT(PRIVATE),COPYIN(AI,BI),SHARED(NTHREADS)
!$OMP DO
      DO I=1,NTHREADS
      CALL IMAT_MUL(SUMI)
      ENDDO
!$OMP END DO
!$OMP END PARALLEL
 
      END
 

+------------------------------End of IBM 拡張-------------------------------+

IBM Copyright 2003