8.3 Fortran 95ステートメント
このセクションにはFortran 95ステートメントに関する簡単な参照ガイドが 含まれています。
- 構文要素の定義は‘::=’によって表されます。
- イタリック体の名前(例えば‘expr’ )は構文要素名です。
- ‘[ ]’中の項目は省略可能です。
- 省略符号‘...’は直前の項目の省略可能な繰返しを意味します。
- ‘{’と‘}’はグルーピングにのみ使用されます。
- ‘|’で区分された項目はその中のどれか一つという選択を表します。
型指定
いくつかの宣言文において次の構文が使用されます。
type-spec ::= | numeric-type [ kind-specifier ] | |
numeric-type * digit-string | | |
DOUBLE PRECISION | | |
CHARACTER [ char-specifier ] |
numeric-type ::= COMPLEX | INTEGER | LOGICAL | REAL |
kind-specifier ::= ( [ KIND = ] expr ) |
char-specifier ::= | * digit-string | |
* ( char-length ) | | |
( char-length [ , [ KIND = ] expr ] ) | | |
( LEN = char-length [ , KIND = expr ] ) | | |
( KIND = expr [ , LEN = char-length ] ) |
char-length ::= * | expr
ラベルと構造構文名
label ::= digit-string |
ラベル中のdigit-string はせいぜい5桁の数字で、少なくとも一つは0以外でなく てはなりません。先行する0は有意ではありませんが、桁数にはカウントされます。
構文定義には示されていませんが、すべての文にはラベルを付加することができます。 FORMAT文にはラベルを付加しなくてはなりません。
construct-name ::= name |
構造構文名は“class 1”名であり、サブプログラム中の他のclass 1名と同一 であってはなりません。class 1名には変数、手続き、プログラム単位名等が含まれ ます。
要素宣言リスト
次の構文は成分の宣言文と型の宣言文で用いられます。
entity-decl-list ::= entity-decl [ , entity-decl ] ... |
entity-decl ::= name [ * char-length ] [ array-spec ] [ initial-value ] |
array-spec ::= explicit-shape | assumed-shape | deferred-shape | assumed-size |
explicit-shape ::= ( explicit-bound [ , explicit-bound ] ... ) |
explicit-bound ::= [ expr : ] expr |
assumed-shape ::= ( assumed-bound [ , assumed-bound ] ... ) |
assumed-bound ::= [ expr ] : |
deferred-shape ::= ( deferred-bound [ , deferred-bound ] ... ) |
deferred-bound ::= : |
assumed-size ::= ( [ explicit-bound , ]... assumed-size-bound ) |
assumed-size-bound ::= [ expr : ] * |
initial-value ::= = expression | => NULL() |
Allocatable文
ALLOCATABLE [ :: ] name [ deferred-shape ] [ , name [ deferred-shape ] ] ... |
リストされた要素が割付け配列であることを宣言します。 配列の上下限が存在する場合にはそれらは遅延型(deferred)でなくてはなりません。
Allocate文
ALLOCATE ( allocate-item [ , allocate-item ] ... [ , STAT = variable ] ) |
allocate-item ::= variable [ explicit-shape ] |
ポインタ、または割付け配列を割付けます。 割付けが失敗し、かつSTAT=文が存在する場合には、STAT=変数に0以外の 値がアサインされます。
Arithmetic If文(旧仕様)
IF ( expr ) label , label , label |
expr が負か0か正かによって3つのラベルのいずれかにブランチします。 数式はスカラで、整数か実数型でなくてはなりません。
Assignment文
variable = expr |
数式は評価され、その値が変数に代入されます。 組込み代入文については、それは変数と代入互換でなくてはなりません。すなわち:
- 変数がスカラであれば数式もスカラでなくてはなりません。 変数が配列の場合には、数式はスカラであっても同一形状の配列であっても構いません。
- 変数が論理(LOGICAL)型の場合、数式もLOGICALでなくてはなりません が、種別(KIND)は任意で構いません。
- 変数が文字(CHARACTER)型の場合、数式もCHARACTER型で同じ種別 (KIND)でなくてはなりません。
- 変数が整数(INTEGER)、実数(REAL)、複素数(COMPLEX) 型のいずれかである場合、数式もINTEGER, REAL, COMPLEX型 でなくてはなりません。
- 変数が構造型の場合、数式も構造型でなくてはなりません。
Backspace文
BACKSPACE expr |
BACKSPACE ( position-spec-list ) |
position-spec-list ::= position-spec [ , position-spec ] |
position-spec ::= { [ UNIT= ] expr } | { IOSTAT= variable } | { ERR= label } |
注:UNIT=position-spec とするにはposition-spec-list が必要 となります。UNIT=キーワードと等号は、それがリスト中の先頭にある場合に 限り省略できます。
指定された装置に接続されたファイルの位置を現行より一つ前のレコードに戻します。 ファイルが接続されていなかったり、装置がバックスペース操作をサポートしていな かった場合には、エラー条件が発生します。
それぞれのposition-spec の効果は次の通りです:
- UNIT=
- 入出力装置を指定します。それは外部ファイルを特定するスカラ整数式でなくてはな りません。
- ERR=
- 入出力文の実行過程でエラー条件が発生した場合に、指定されたラベルに制御を移行 します。
- IOSTAT=
- エラーが発生した場合にvariable に正の値をセットします。そうでない場合に は0をセットします。
Block Data文
BLOCK DATA [ name ] |
これはブロックデータサブプログラムの最初の文です。 一つのブロックデータサブプログラム以外にはすべて名前を付ける必要があります。
Call文
CALL name [ ( [ actual-arg-list ] ) ] |
actual-arg-list ::= actual-arg [ , actual-arg ]... |
actual-arg ::= expr | * label |
指定されたサブルーチンをコールします。
Case文
CASE DEFAULT [ construct-name ] |
CASE ( case-value-range [ , case-value-range ]... ) [ construct-name ] |
case-value-range ::= | expr [ : [ expr ] ] | |
: expr |
CASE部分の先頭(と同時に先行するCASE部分の末尾)であることを 示します。 この部分の文は対応するSELECT式の値が次のようなCASE条件を満足 したときに実行されます:
- .EQ.
- (expr)の形のcase-value-range
- .LE.
- (:expr)の形のcase-value-range
- .GE.
- (expr:)の形のcase-value-range
- range
- (expr:expr)の形のcase-value-range は1番目の 式より大きいか等しく、かつ2番目の式より小さいか等しい場合に満足されます。
- DEFAULT
- CASE DEFAULT節は値がSELECT構文中のどのCASE文も満足しなかっ た場合に選択されます。
SELECT構文の中では個々のCASE文がそれぞれ別個の条件を規定し、どれ か一つのみが満足されるように設定する必要があります。
Close文
CLOSE expr |
CLOSE ( position-spec-list ) |
(position-spec-list の定義についてはBACKSPACE文をご参照ください。)
指定された装置をクローズします。
Common文
COMMON | [ / [ common-block-name ] / ] common-object-list |
[ [ , ] / [ common-block-name ] / common-object-list ]... |
common-object-list ::= common-object [ , common-object ]... |
common-object ::= name [ array-spec ] |
共通ブロックを宣言します。 common-block-name が指定されなかった場合には“blank common”が宣言され た共通ブロックとなります。 同一の共通ブロックに対し複数のCOMMON文が与えられた場合には、単一の文中に 複数のcommon-object-list が連結されたものとして処理されます。
Component Definition文
type-spec [ [ , component-attribute-list ] :: ] entity-decl-list |
component-attribute-list ::= component-attr [ , component-attr ]... |
component-attr ::= | DIMENSION array-spec | |
POINTER |
構造体の一つ、または複数の成分を宣言します。 成分定義中のarray-spec は、POINTER属性が存在する場合には deferred-shape、そうでない場合にはexplicit-shape でなくてはなり ません。 initial-value は同一タイプの新たな言語要素中の該当成分に対するデフォ ルト値を定義します。
計算型Goto文(旧仕様)
GOTO ( label [ , label ] ... ) expr |
(整数スカラ)式を評価、その値が1より小さいか、あるいはリスト中のラベル 数より大きい場合には、制御は次の文に移されます。そうでない場合には制御は 対応するラベルに移されます。
Contains文
CONTAINS |
この文はモジュールの宣言部を含まれている手続きから、そしてメインプログラ ムや手続きの宣言部や実行可能部を含まれている手続きから分離します。
Continue文
CONTINUE |
これは何の影響も持たない実行可能文です。 ラベルがある場合にはDO構文の終了文として、あるいはGOTO, computed-GOTO, assigned-GOTOのターゲットとして使用できます。
Cycle文
CYCLE [ construct-name ] |
指定されたDO構文、またはconstruct-name が省略された場合には 最も内側の閉じたDO構文の次の繰返しを開始します。
Data文
DATA data-set [ , data-set ]... |
data-set ::= data-object-list / data-value-list / |
data-object-list ::= data-object [ , data-object ]... |
data-object ::= variable | data-implied-do |
data-implied-do ::= ( data-object [ , data-object ]... do-spec ) |
data-value-list ::= data-value [ , data-value ]... |
data-value ::= [ data-repeat * ] data-constant |
data-repeat ::= constant | constant-subobject |
data-constant ::= | literal-constant | NULL() | structure-constructor | object | |
{ + | - } { real-literal | integer-literal } |
指定されたオブジェクトの初期値を宣言します。 これはそれらのオブジェクトがSAVE属性を持つことを暗黙のうちに宣言 します。
Deallocate文
DEALLOCATE ( expr [ , expr ] [ , STAT = variable ] ) |
割付け配列、ポインタに割り付けられているメモリを解放します。 解放対象の割付け配列が割付けられていない場合、あるいは解放対象のポインタの 結合が切れていたり、ALLOCATEで割り付けられたものではないオブジェクト と結合していた場合にはエラーが発生します。
Dimension文
DIMENSION [ :: ] name array-spec [ , name array-spec ]... |
名前が指定された上下限を持つ配列であることを宣言します。
Do文
[ construct-name : ] DO [ label ] [ , ] [ loop-control ] |
loop-control ::= | do-spec | |
WHILE ( logical-expr ) |
do-spec ::= name = expr , expr [ , expr ] |
DOループの最初の文です。 label が存在する場合にはループはそのラベルを持った文で終了します。 その文はGOTO, RETURN, STOP, EXIT, CYCLE, END, arithmetic IF文であってはなりません。 ネストされたDOループの場合、それがENDDO文でなければ同一 の終端文を共用できます。 loop-control がない場合には、DOループは(例えばEXIT, GOTO, RETURN文により)制御が明示的にループ外に移されたと きに限り終了します。
construct-name が存在する場合には、DOループは同一の構文名 で特定されるENDDO文で終了させる必要があります。
Else文
ELSE [ construct-name ] |
IF-THEN構文のELSE部分を開始します。 この部分の文はIF条件が偽で、かつ同一レベルにあるすべてのELSEIF 条件が偽である場合に限り実行されます。 IF-THEN文がconstruct-name を持つ場合には、ELSE文で同一の 構造構文名を指定することができます。
Elseif文
ELSE IF ( expr ) THEN [ construct-name ] |
IF-THEN構文の(新たな)ELSEIF部分を開始します。 この部分の文はIF条件が偽で、かつ同一レベルにあるすべての先行する ELSEIF条件が偽で、さらにこのELSEIF条件が真である場合に限り 実行されます。 IF-THEN文がconstruct-name を持つ場合には、ELSEIF文で同一 の構造構文名を指定することができます。
Elsewhere文
ELSEWHERE [ construct-name ] |
WHERE構文のELSEWHERE部分を開始します。 この部分の文は、WHEREマスクが偽で、かつ同一レベルのすべての ELSEWHEREマスクも偽である要素に対してのみ実行されます。
WHERE文がconstruct-name を持つ場合には、ELSEWHERE文で同一 の構造構文名を指定することができます。
Elsewhere Mask文
ELSEWHERE ( expr ) [ construct-name ] |
WHERE構文の選別ELSEWHERE部分を開始します。 この部分の文は、先行するマスクが偽で、このELSEWHEREマスクが真である 要素に対してのみ実行されます。 (先行するマスクとは、WHEREマスクとこのWHERE構文中にある同一レ ベルのすべての先行するELSEWHEREマスクのことを言います。) 先行するマスクの偽の要素に対応しないELSEWHEREマスクの要素は評価されな い点に注意してください。
WHERE文がconstruct-name を持つ場合には、ELSEWHERE-mask文 で同一の構造構文名を指定することができます。
End Block Data文
END [ BLOCK DATA [ name ] ] |
ブロックデータサブプログラムの最後の文。 name が存在する場合には、サブプログラムの先頭にあるBLOCK DATA文 は同一名を指定していなくてはなりません。
Enddo文
END DO [ construct-name ] |
DO構文の終端であることを示します。 construct-name は、それがDO文で指定されている場合には存在してい なくてはならず、同一の構造構文名でなくてはなりません。 DO文が終端ラベルを指定している場合、ENDDO文にはそのラベルが 付けられていなくてはなりません。
Endfile文
ENDFILE expr |
ENDFILE ( position-spec-list ) |
(position-spec-list の定義についてはBACKSPACE文をご参照ください。)
ファイル終了(endfile)レコードを指定された外部ファイル上に書き込みます。 ファイルは現行の位置で切り取られます。
End Function文
END [ FUNCTION [ name ] ] |
関数サブプログラムの最後の文。 関数サブプログラムが含められた(contained)サブプログラムの場合にはキーワード FUNCTIONが存在していなくてはなりません。name が存在する場合には、 それは関数の名前でなくてはなりません。
Endif文
END IF [ construct-name ] |
IF-THEN構文の終端であることを示します。 construct-name は、それがIF-THEN文で指定されている場合には存在してい なくてはならず、同一の構造構文名でなくてはなりません。
End Interface文
END INTERFACE [ generic-spec ] |
引用仕様宣言の終端であることを示します。 INTERFACE文がgeneric-spec を持つ場合には、それはENDINTERFACE 文で使用することができます。
End Module文
END [ MODULE [ name ] ] |
モジュールサブプログラムの最後の文です。 name が存在する場合、それはMODULE文での名前と一致していなくてはなり ません。
End Program文
END [ PROGRAM [ name ] ] |
メインプログラム単位の最後の文です。 name が存在する場合、メインプログラムにはPROGRAM文があり、名前は同一 でなくてはなりません。
End Select文
END SELECT [ construct-name ] |
SELECT構文の終端であることを示します。 construct-name は、それがSELECT文で指定されている場合には存在してい なくてはならず、同一の構造構文名でなくてはなりません。
End Type文
END TYPE [ name ] |
構造型定義の終端であることを示します。 name が存在する場合、それは構造型の名前でなくてはなりません。
Endwhere文
ENDWHERE [ construct-name ] |
WHERE構文の終端であることを示します。 construct-name は、それがWHERE文で指定されている場合には存在してい なくてはならず、同一の構造構文名でなくてはなりません。
Equivalence文
EQUIVALENCE equivalence-set [ , equivalence-set ]... |
equivalence-set ::= ( variable { , variable }... ) |
結合対応中の個々のオブジェクトが同一の記憶装置を占めることを宣言します。
Entry文
ENTRY name [ ( [ arg-list ] ) ] |
Enclose型サブプログラムに対する追加の入口点を宣言します(入口点はブロックデータ、 メインプログラム、モジュール、内部サブプログラムに対しては設定できません)。
External文
EXTERNAL name [ , name ]... |
リストされた名前を外部サブプログラム、またはブロックデータサブプログラムに対して 宣言します。
Exit文
EXIT [ construct-name ] |
名前付きDOループ、またはconstruct-name が省略された場合には 最も内側のDOループに続く文に制御を移します。
Forall文
FORALL ( triplet-spec [ , triplet-spec ]... [ , expr ] ) forall-assignment-stmt |
triplet-spec ::= name = expr : expr [ : expr ] |
FORALL文、または構文の反復空間は、最終のexpr(存在した場合)に よってマスクされたそれぞれのtriplet-spec によって定義される可能なインデッ クス値の集合の外積です。インデックス名のスコープはそのFORALL文に限られる 点に注意してください – FORALL文の外部にある同一名の変数は影響を受けま せん。
FORALL文は反復空間でセットされたそれぞれのインデックス値に対し forall-assignment 文を実行します。
Forall Assignment文
variable = expr |
variable => expr |
これは通常の代入文と変わりませんが、それぞれのvariable に対する代入、 またはポインタ代入に先立ち、反復空間の個々の要素に対しexpr が評価される 点が異なります。 反復空間において配列の同一要素に対し複数回の代入は許されず、また変数がスカラ であれば反復空間は1要素でなくてはならない点に注意してください。
Forall Construct文
FORALL ( triplet-spec [ , triplet-spec ]... [ , expr ] ) |
(triplet-spec の定義と反復空間の説明についてはFORALL文をご参照 ください。)
FORALL構文を開始します。
Format文
FORMAT ( [ format-list ] ) |
format-list ::= format-item [ , format-item ]... |
format-item ::= [ digit-string ] { data-edit | ( format-list ) } | other-edit |
data-edit ::= | { I | B | O | Z } digit-string [ . digit-string ] | |
{ F | D } digit-string . digit-string | | |
{ E | EN | ES | G } | |
digit-string . digit-string [ E digit-string ] | | |
L digit-string | | |
A [ digit-string ] |
other-edit ::= | digit-string { / | P | X } | |
{ T | TR | TL } digit-string | | |
character-literal | | |
digit-string H char... | | |
/ | : | BN | BZ | S | SP | SS |
注:character-literal はkind-specifier を持つことはできません。 H編集記述子にはdigit-string char(行末(EOL)を除く任意の文字) を続けます。この編集記述子は旧仕様であるので、character-literal の方を 使うようにしてください。
入出力用書式を宣言します。注:format-item 間のコンマは次のような場合に省略できます:
- ‘P’記述子と後続の‘D’, ‘E’, ‘EN’, ‘ES’, ‘F’, ‘G’ 記述子の間
- 先行するdigit-string がない場合の‘/’記述子の前
- ‘/’記述子の後
- ‘:’記述子の前後
Function文
[ prefix ] FUNCTION name ( [ name [ , name ] ... ] ) [ RESULT(name) ] |
prefix :: = { type-spec | RECURSIVE | PURE | ELEMENTAL }... |
注:それぞれの接頭項目はたかだか1度しか指定できません。
これは関数サブプログラムの最初の文です。 RESULT変数が指定されていなかった場合には、結果変数は関数名と同一の 名前を持ちます(従って直接再帰の場合にはRESULT節がRECURSIVE キーワードと共に必要になります)。Goto文
GOTO label |
飛び先文(すなわちサブプログラムのEND文、実行可能文、実行可能構文 の最初の文、またはenclose型実行可能構文の最後の文)に付けられているはずの 指定されたラベルに分岐します。
If文
IF ( expr ) executable |
条件が真である場合に限りサブステートメントを実行します。 サブステートメントはそれ自身IF文であってはなりません。
If Then文
[ construct-name : ] IF ( expr ) THEN |
IF-THEN構文とそのTHEN部分を開始します。 この部分の文は条件が真である場合に限り実行されます。 この文は構文名を持っていても構いません。その場合には対応するENDIF 文は同一の構文名を持っていなくてはなりません。また介在する同一レベルの ELSE, ELSEIF文にも同一の構文名を付けることができます。
Implicit文
IMPLICIT implicit-spec [ , implicit-spec ]... |
implicit-spec ::= type-spec ( letter-spec [ , letter-spec ] ... ) |
letter-spec ::= letter [ - letter ] |
暗黙の型マッピングをデフォルトから変更します。 外部サブプログラムや引用仕様本体中ではデフォルトマップは
IMPLICIT REAL(A-H,O-Z),INTEGER(I-N)であり、含まれている(contained)サブプログラム中の含んでいる(containing) サブプログラムと同一です。
Implicit None文
IMPLICIT NONE |
この文は各文字に対する暗黙の型マッピングをnullにセットします。すなわち暗黙の型 は存在しなくなります。 これはすべてのPARAMETER文や他の宣言文に先行している必要があります(ただ しすべてのUSE文よりも後でなくてはなりません)。
Inquire文
INQUIRE ( IOLENGTH=object ) output-item [ , output-item ]... |
INQUIRE ( inquire-spec [ , inquire-spec ]... ) |
inquire-spec ::= | [ UNIT= ] expr | ACCESS= variable | ACTION= variable | BLANK= variable | CONVERT= variable | |
DELIM= variable | DIRECT= variable | ERR= label | EXIST= variable | FILE= expr | | |
FORM= variable | FORMATTED= variable | IOSTAT= variable | NAME= variable | | |
NAMED= variable | NEXTREC= variable | NUMBER= variable | OPENED= variable | | |
PAD= variable | POSITION= variable | READ= variable | READWRITE= variable | | |
RECL= variable | SEQUENTIAL= variable | UNFORMATTED= variable |
output-item ::= expr | ( { output-item , } ... do-spec ) |
1番目の形式は、output-item リストだけの大きさのレコードを書くのに必要な 大きさを持った書式なし順編成ファイルに対するOPEN文において、RECL= に指定するのに必要な長さを問い合わせます。
2番目の形式は装置単位かファイル単位かを問い合わせます。一つのUNIT=、 またはFILE=節がなくてはなりません(UNIT=キーワードはそれが最初 のinquire-spec である場合に省略できます)。 FILE=節が使われ、そのファイルが現在装置に接続されている場合には、装置 を指定したのと同じことになります。
それぞれの節の効果は次のようになります:
- ACCESS=
- 装置が順アクセス用に接続されている場合にはスカラ文字オブジェクトを 'SEQUENTIAL'に、装置が直接アクセス用に接続されている場合には 'DIRECT'に、接続が存在しない場合には'UNDEFINED'にセットします。
- ACTION=
- 装置が入力専用として接続されている場合にはスカラ文字オブジェクトを 'READ'に、装置が出力専用として接続されている場合には'WRITE'に、 装置が入出力用として接続されている場合には'READWRITE'に、接続が存在 しない場合には'UNDEFINED'にセットします。
- BLANK=
- 装置が書式付き入出力用として接続されている場合、入力時に空白をnullとして扱 うのであればスカラ文字オブジェクトを'NULL'に、入力時にそれらを0とし て扱うのであれば'ZERO'にセットします。そうでない場合にはオブジェクト は'UNDEFINED'にセットされます。
- CONVERT=
- ファイルが 'UNDEFINED' で接続されている場合は、スカラ文字の実体を 'UNKNOWN' にセットし、そうでない場合は OPEN 文の CONVERT= 指定子、もしくは環境変数 FORT_CONVERTn によって指定される値にセットします。 指定可能な値は 'NATIVE', 'BIG_NATIVE', 'LITTLE_NATIVE', 'BIG_IEEE', 'LITTLE_IEEE', 'BIG_IEEE_DD', 'LITTLE_IEEE_DD' です。
- DELIM=
- 装置に対する並び出力、または変数群出力において、アポストロフィーを文字データ の仕切り用に使うのであればスカラ文字オブジェクトを'APOSTROPHE'に、 引用符を使うのであれば'QUOTE'に、何の仕切り文字も使わないのであれば 'NONE'に、接続が存在しないのであれば'UNDEFINED'にセットします。
- DIRECT=
- 装置に対し直接アクセスが許されているのであればスカラ文字オブジェクトを 'YES'に、直接アクセスが許されていないのであれば'NO'に、応答を 決定できないのであれば'UNKNOWN'にセットします。
- ERR=
- 問合せの実行過程でエラー条件が発生した場合には指定されたラベルに制御を移し ます。
- EXIST=
- ファイル、または装置が存在する場合にはスカラのデフォルト論理オブジェクトを .TRUE.に、そうでない場合には.FALSE.にセットします。
- FORM=
- 装置が書式付き入出力用に接続されている場合にはスカラ文字オブジェクトを 'FORMATTED'に、書式なし入出力用に接続されている場合には 'UNFORMATTED'に、接続が存在しない場合には'UNDEFINED'にセット します。
- FORMATTED=
- 装置に対し書式付き入出力が許されているのであればスカラ文字オブジェクトを 'YES'に、それが許されていないのであれば'NO'に、応答を決定で きないのであれば'UNKNOWN'にセットします。
- IOSTAT=
- スカラのデフォルト整数オブジェクトを問合せの過程でエラー条件が発生したこ とを示す0以外の値に、そうでない場合には0にセットします。
- NAME=
- 装置に接続されているファイル名をスカラ文字オブジェクトにセットします (名前がない場合は不定となります)。
- NAMED=
- 装置が名前の付いたファイルに接続されている場合にはスカラのデフォルト論理 オブジェクトを.TRUE.に、そうでない場合には.FALSE.にセット します。
- NEXTREC=
- 装置が直接アクセス用に接続されている場合、スカラのデフォルト整数オブジェ クトを最後に読んだり書かれたりしたレコード番号より1大きな値(レコードの 読み書きが行われていない場合には1)にセットします。そうでない場合にはオ ブジェクトの値は不定となります。
- NUMBER=
- スカラのデフォルト整数オブジェクトにファイルが接続されている装置の番号を、 ファイルが装置に接続されていない場合には-1をセットします。
- OPENED=
- 装置がファイルに接続されている場合(あるいはファイルが装置に接続されている 場合)にはスカラのデフォルト論理オブジェクトを.TRUE.に、そうでない 場合には.FALSE.にセットします。
- PAD=
- ファイルの装置への接続がPAD='NO'指定子を含んでいた場合にはスカラの 文字オブジェクトを'NO'に、そうでない場合には'YES'にセットし ます。
- POSITION=
- 装置がファイルの先頭に位置付けられている場合にはスカラの文字オブジェクトを 'REWIND'に、ファイルの末尾に位置付けられている場合には 'APPEND'に、装置がasisとして接続されている場合(でかつ、入出力や位置 付けが接続以降行われていない場合)には'ASIS'に、装置が直接アクセス用 に接続されているか、または接続が存在しない場合には'UNDEFINED'に、そ れ以外の場合にはプロセッサ依存の値にセットされます。
- READ=
- ファイル、または装置に対し入力が許されているのであればスカラ文字オブジェクト を'YES'に、ファイル、または装置に対し入力が許されていないのであれば 'NO'に、応答を決定できないのであれば'UNKNOWN'にセットします。
- READWRITE=
- ファイル、または装置に対し入出力が許されているのであればスカラ文字オブジェク トを'YES'に、ファイル、または装置に対し入出力の少なくとも一方が許され ていないのであれば'NO'に、応答を決定できないのであれば 'UNKNOWN'にセットします。
- RECL=
- スカラのデフォルト整数オブジェクトに直接アクセス用として接続されているファイ ルのレコード長、もしくは順アクセス用として接続されているファイルの最大レコー ド長をセットします。 接続が存在しない場合にはオブジェクトの値は不定となります。
- SEQUENTIAL=
- 装置に対し順アクセスが許されているのであればスカラ文字オブジェクトを 'YES'に、順アクセスが許されていないのであれば'NO'に、応答を決定 できないのであれば'UNKNOWN'にセットします。
- UNFORMATTED=
- 装置に対し書式なし入出力が許されているのであればスカラ文字オブジェクトを 'YES'に、それが許されていないのであれば'NO'に、応答を決定で きないのであれば'UNKNOWN'にセットします。
- WRITE=
- ファイル、または装置に対し出力が許されているのであればスカラ文字オブジェクト を'YES'に、ファイル、または装置に対し出力が許されていないのであれば 'NO'に、応答を決定できないのであれば'UNKNOWN'にセットします。
Intent文
INTENT ( { IN | OUT | INOUT } ) [ :: ] name [ , name ]... |
指定された名前(仮引数の名前でなくてはなりません)が指定された拝受特性を有す ることを宣言します。INTENT(IN)引数は変更される可能性のある文脈中で使 用することはできません。INTENT(OUT)引数は手続きに入った時点では不定で す。INTENT(INOUT)とINTENT(OUT)引数は変更可能な実引数(例えば式 でないもの)とのみ結合させることができます。
Interface文
INTERFACE |
INTERFACE { name | ASSIGNMENT(=) | OPERATOR(operator) } |
1番目の形式は外部、または仮手続きとのインタフェース(引用仕様)を指定する引用 仕様本体を含む引用仕様宣言を誘導します。 2番目の形式ではこれらの手続きがそれによって参照されうる総称名や演算子も 定義することができます。その引用仕様宣言にはMODULE PROCEDURE文を含める ことができます。
Intrinsic文
INTRINSIC name [ , name ]... |
リストされた名前が組込み手続きであることを宣言します。
Module文
MODULE name |
これはモジュールサブプログラムの最初の文です。
Module Procedure文
MODULE PROCEDURE name [ , name ]... |
この文は総称引用仕様宣言内でのみ使用できます。それはリストされた名前が 総称中に含められるべきモジュール手続きであることを宣言します。
Namelist文
NAMELIST namelist-group [ [ , ] namelist-group ]... |
namelist-group ::= /name/ name [ , name ]... |
入出力の名前リストを宣言します。 名前リストグループ/name/に対する多重のNAMELIST 指定は連結されるものとして処理されます。 名前リストグループ中の名前はすべて変数でなくてはならず、自動、整合、割付け ポインタであってはなりません。
Nullify文
NULLIFY ( object [ , object ] ... ) |
リストされたオブジェクト(ポインタでなくてはなりません)のポインタ結合状態 を結合されていない状態にします。
Open文
OPEN ( open-spec [ , open-spec ]... ) |
open-spec ::= | [ UNIT= ] expr | ACCESS= expr | ACTION= expr | BLANK= expr | CONVERT= expr | DELIM= expr | |
ERR= label | FILE= expr | FORM= expr | IOSTAT= object | PAD= expr | POSITION= expr | | |
RECL= expr | STATUS= expr |
ファイルを指定された特性を持つ装置に結合します。
Optional文
OPTIONAL [ :: ] name [ , name ]... |
指定された名前(仮引数の名前でなくてはなりません)が省略可能な仮引数である ことを宣言します。
Parameter文
PARAMETER ( name = expr [ , name = expr ]... ) |
名前が指定された値を持つ名前付き定数であることを宣言します。 式は初期化式であり、名前と代入互換でなくてはなりません。
Pause文(削除)
PAUSE [ constant ] |
プログラムの実行を一時停止します。 定数が指定された場合、それはkind-param やdigit-string を持たない 高々5桁のスカラ文字表現でなくてはなりません。
Pointer文
POINTER [ :: ] name [ deferred-shape ] [ , name [ deferred-shape ] ]... |
名前がポインタであることを宣言します。
Pointer Assignment文
variable => expr |
ポインタvariable にexpr を結び付けます。式は別のポインタ、 TARGET属性を持った変数、またはポインタを応答として返す関数 への引用でなくてはなりません。
Print文
PRINT format [ , output-item ]... |
format ::= * | label | expr |
‘UNIT=*’とFMT=format 節を指定したWRITE文と 同義です。
format としてあり得るのは次の通りです:
- ‘*’
- 並び書式であることを示します。
- label
- FORMAT文のラベルでなくてはなりません。
- expr
- 文字式を記述できます。その値はFORMAT文のFORMATキーワードに 続く文字列として解釈されます。 式が配列値のときは全要素の連結が同様に解釈されます。
- expr
- (旧仕様) デフォルトのスカラ整変数を記述できます。その場合、それに はFORMAT文のラベルがASSIGNされていなくてはなりません。
Private文
PRIVATE [ [ :: ] access-id [ , access-id ]... ] |
access-id ::= name | ASSIGNMENT(=) | OPERATOR(operator) |
この文はモジュールの宣言部中においてのみ、あるいは型定義中の成分定義の前 でのみ使用できます。
この文が型定義中で使用された場合にはaccess-id の指定はできません。 その型が定義されているモジュール外から型の成分がアクセスできなくなって しまうからです。
モジュールの宣言部中において、この文はモジュール内言語要素へのデフォルト アクセシビリティをPRIVATE、すなわちアクセス不可にセットするか、も しくは個々のaccess-id のアクセシビリティをPRIVATEにセットし ます。
Program文
PROGRAM name |
これはメインプログラムの最初の文で省略可能です。
Public文
PUBLIC [ [ :: ] access-id [ , access-id ]... ] |
この文はモジュールの宣言部中においてのみ使用できます。 access-id リストが存在しない場合、それはモジュール内言語要素へのデフォ ルトアクセシビリティがPUBLICであることを確認します。access-id リストが存在する場合にはこれらaccess-id のアクセシビリティを明示的に PUBLICにセットします。
Read文
READ format [ , input-item ]... |
READ ( control-spec [ , control-spec ]... ) [ input-item [ , input-item ]... ] |
input-item ::= variable | ( { input-item , }... do-spec ) |
control-spec ::= | [ UNIT= ] { * | expr } | |
[ FMT= ] format | [ NML= ] name | ADVANCE= expr | END= label | | |
EOR= label | ERR= label | IOSTAT= expr | REC= expr | SIZE= expr |
(format の詳細についてはPRINT文をご参照ください。)
指定された装置から一つ、または複数のレコード(ADVANCE='NO'が指定 された場合には部分レコード)を読み込みます。
個々の制御指示子の効果は次の通りです:
- UNIT=
- 入出力装置を特定します。‘*’はデフォルト装置を、スカラ整数式は外部装置を、 文字式は内部装置を示します。
- FMT=
- 書式を確定します。変数群書式、あるいは書式なし入出力の場合には指定しません。
- NML=
- 変数群書式付き入出力に対する変数群名を指定します。
- ADVANCE=
- 非前進(式は'NO'に評価される)入出力、あるいは通常の前進(式は 'YES'に評価される)入出力のどちらを行うかを示します。 この制御指定子は明示的書式(すなわち変数群、並び書式でないもの)を用い た書式付き順入出力の場合にのみ許容されます。
- END=
- 入力に際してファイル終了条件が発生した場合に指定されたラベルに制御を移し ます(WRITEでは許されません)。
- EOR=
- 入力に際してレコード終了条件が発生した場合に指定されたラベルに制御を移し ます(WRITEでは許されません)。ADVANCE='NO'の指定が必要です。
- ERR=
- 入出力に際してエラー条件が発生した場合に指定されたラベルに制御を移します。
- IOSTAT=
- ファイル終了が起きた場合にオブジェクトを−1に、レコード終了が起きた場合に −2に、エラーが起きた場合に正の数に、それ以外の場合に0にセットします。 他のコンパイラの場合には負の値は変わる可能性があります。
- REC=
- 直接アクセス入出力に対しレコード番号を指定します。
- SIZE=
- オブジェクトをデータ編集記述子によって転送された文字数にセットします (WRITEでは許されません)。ADVANCE='NO'の指定が必要です。
Return文
RETURN [ expr ] |
手続きからすぐに戻ります。 手続きが選択戻り引数(旧仕様)を持つサブルーチンであった場合には、スカラ 整数式が戻り時にどのラベルに制御を移すかを規定します(式の値が1より小さいか、 または選択戻り引数の数よりも大きい場合には、サブルーチン引用に続く文を用いて 実行が続けられます)。
Rewind文
REWIND expr |
REWIND ( position-spec-list ) |
(position-spec-list の定義についてはBACKSPACE文をご参照ください。)
入出力装置(まき戻し可能なファイルに接続されていなくてはなりません)をファイル の先頭に位置付けます。
Save文
SAVE [ [ :: ] save-item [ , save-item ]... ] |
save-item ::= variable-name | /common-block-name/ |
リストされた変数、または共通ブロックに対するSAVE属性を指定します。ただ しsave-item リストがなかった場合には、現在の有効域内のあらゆる変数、また は共通ブロックがデフォルトとしてSAVE属性を有すべきことを指定します。
Select 文
[ construct-name : ] SELECT CASE ( expr ) |
SELECT CASE構文の最初の文です。 制御は式の値が満足するCASE文に移されますが、どのCASEも満たされな かった場合にはEND SELECT文に移されます。
Statement Function文(旧仕様)
name ( [ name [ , name ] ... ] ) = expr |
文関数を定義します。
Stop文
STOP [ constant ] |
プログラムの実行を停止します。 もし存在する場合、定数はkind-param やdigit-string を含まない高々 5桁のスカラ文字表現でなくてはなりません。
Subroutine文
[ RECURSIVE | PURE | ELEMENTAL]... SUBROUTINE name [ ( [ arg-list ] ) ] |
(それぞれのキーワードは高々1度しか指定できません。)
arg-list ::= arg [ , arg ]... |
arg ::= name | * |
これはサブルーチンサブプログラムの最初の文です。 サブルーチンが直接的に、あるいは間接的に自分自身をコールする場合には RECURSIVEの指定が必要です。 PUREが指定された場合にはサブルーチンは純粋サブルーチン制約を満足して いなくてはなりませんが、その場合には純粋関数からコールできます。 arg が‘*’の場合、それは選択戻りラベルを意味します (旧仕様)。
Target文
TARGET [ :: ] name [ array-spec ] [ , name [ array-spec ] ]... |
指定された言語要素がTARGET属性を有することを宣言します。
Type文
TYPE name |
構造型name の定義の開始を示します。
Type Declaration文
type-spec [ [ , attr-spec ] ... :: ] entity-decl-list |
attr-spec ::= | ALLOCATABLE | DIMENSION array-spec | EXTERNAL | INTENT ( { IN | OUT | INOUT } ) | |
INTRINSIC | OPTIONAL | PARAMETER | POINTER | PRIVATE | PUBLIC | SAVE | TARGET |
リストされた言語要素が指定された属性を持つ指定された型であることを宣言します。
Use文
USE name [ , rename-list ] |
USE name, ONLY: only-list |
rename-list ::= rename [ , rename ]... |
rename ::= local-name => remote-name |
only-list ::= only-item [ , only-item ]... |
only-item ::= name | rename |
USE文は指定されたモジュールをアクセスします。 同一のモジュールに対し複数のUSE文が与えられた場合には、すべての rename-list やonly-list が連結されたものとして処理されます。
特定のモジュールに対する有効域中におけるすべてのUSE文がONLY 節を持つ場合、rename-list、またはonly-list にリストされている 項目のみがアクセス可能になります。
rename は参照されているモジュール中の項目remote-name をローカ ルな有効域中でlocal-name という名前でアクセスできるようにします。 rename ではないonly-item は参照されているモジュール中の項目 name をローカルな有効域中で同一名でアクセスできるようにします。
Where Assignment文
variable = expr |
現在の制御配列が真である要素に対してのみ式を評価(、オブジェクトをアップデー ト)します。
Where文
WHERE ( expr ) where-assignment-stmt |
与えられた式を制御配列としてWhere Assignment文を実行します。
Where Construct文
[ construct-name : ] WHERE ( expr ) |
与えられた式を制御配列としてWhere Constructを開始します。
Write文
WRITE ( control-spec [ , control-spec ] ... ) output-item [ , output-item ]... |
(control-spec の詳細についてはREAD文をご参照ください。)
指定された装置に一つ、または複数のレコード(ADVANCE='NO'が指定 された場合には部分レコード)を書き込みます。