XL Fortran for AIX V8.1.1

ランゲージ・リファレンス


行およびソース形式

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

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

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

+--------------------------------IBM 拡張の終り-------------------------------+

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


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

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

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

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

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

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

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

+--------------------------------IBM 拡張の終り-------------------------------+

固定ソース形式

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

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

+--------------------------------IBM 拡張の終り-------------------------------+

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

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

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

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

+--------------------------------IBM 拡張の終り-------------------------------+

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

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

デバッグ行

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

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

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

+--------------------------------IBM 拡張の終り-------------------------------+

固定ソース形式の例
C Column Numbers:
C        1         2         3         4         5         6         7
C23456789012345678901234567890123456789012345678901234567890123456789012
 
!IBM* SOURCEFORM (FIXED)
      CHARACTER ABC ; 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

自由ソース形式

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

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

+--------------------------------IBM 拡張の終り-------------------------------+

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

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

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

ホワイト・スペース

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

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

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

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

+--------------------------------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 プログラムの編集、コンパイル、リンク、実行』の中の『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

+--------------------------------IBM 拡張の終り-------------------------------+


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]