nAG Fortran コンパイラ 7.2 マニュアル

 
ナビゲーション:前へ   上へ   次へ

8.2 Fortran 95数式

このセクションにはFortran 95における数式の構文とセマンティックスに関する 簡単な参照ガイドが含まれています。 詳細はMetcalf, Reid, Cohen著“Fortran 95/2003 Explained”、または Fortran 95標準“IS 1539-1:1997”をご参照ください。

  • 構文要素の定義は‘::=’によって表されます。
  • イタリック体の名前(例えば‘expr’ )は構文要素名です。
  • ‘[ ]’中の項目は省略可能です。
  • 省略符号‘...’は直前の項目の省略可能な繰返しを意味します。
  • ‘{’と‘}’はグルーピングにのみ使用されます。
  • ‘|’で区分された項目はその中のどれか一つという選択を表します。

一般形式

数式expr の一般形式は次の通りです:

expr ::= [ unary-operator ] operand [ binary-operator operand ]...

operand ::= literal-constant | object | array-constructor |
structure-constructor | function-reference | ( expr )

binary-operator ::= + | - | * | / | ** | == | /= | < | > | <= | >= | // |
.AND. | .OR. | .EQV. | .NEQV. | user-operator

unary-operator ::= + | - | .NOT. | user-operator

user-operator ::= .letter[letter...].

演算子==, /=, <, >, <=, >=はそれぞれ .EQ., .NE., .LT., .GT., .LE., .GE.と 表現することもできます。

演算子

二項演算子は左から右に結合されます。ただし例外はべき乗で、右から左に結合されま す。 個々の演算子の優先順位を高いものから順に示したものが次の表です:

演算子 二項/単項
user-operator Unary
** Binary
* / Binary
+ - Unary
+ - Binary
// Binary
== /= < > <= >= Binary
.NOT. Unary
.AND. Binary
.OR. Binary
.EQV. .NEQV. Binary
user-operator Binary

定数表現

literal-constant ::= integer-literal | real-literal | double-precision-literal |
logical-literal | complex-literal | character-literal

integer-literal ::= digit-string [ _ kind-specifier ]

digit-string ::= { 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 }...

kind-specifier ::= digit-string | name

注:nameINTEGER PARAMETER名でなくてはなりません。

例:

      42
      17_1
      32767_int16

real-literal ::= mantissa [ E exponent ] [ _ kind-specifier ] |
digit-string E exponent [ _ kind-specifier ]

mantissa ::= digit-string . [ digit-string ] |
. digit-string

exponent ::= [ + | - ] digit-string

例:

      4.2
      .7_1
      327E+67_real64

double-precision-literal ::= { mantissa | digit-string } D exponent

例:

      4d2
      1.7D-10

logical-literal ::= { .TRUE. | .FALSE. } [ _ kind-specifier ]

complex-literal ::= ( int-or-real-literal , int-or-real-literal )

int-or-real-literal ::= integer-literal | real-literal

例:

      (42,17_1)
      (0,1d0)

character-literal ::= [ kind-specifier _ ] { ' [char...] ' | " [char...] " }

注:char は引用符以外の任意の文字、または2重に入力された引用符を意味しま す(例えば''''"'"と同一です)。

例:

      '42'
      "Say 'Hello'."

定数

constant ::= literal-constant | name

名前付き定数はPARAMETER文、またはPARAMETER属性を伴う型宣言文に よって宣言されます。

オブジェクト

object ::= object-ref [ % object-ref ]... [ ( substring-range ) ]

object-ref ::= name [ section-subscript-list ]

section-subscript-list ::= ( section-subscript [ , section-subscript ]... )

section-subscript ::= expr | triplet

triplet ::= [ expr ] : [ expr ] [ : expr ]

substring-range ::= [ expr ] : [ expr ]

name ::= letter [ letter | digit | _ ] ...

letter ::= A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W |
X | Y | Z

variable ::= object

constant-subobject ::= object | character-literal ( substring-range )

注:variable について、最初のobject-ref 中の名前は変数名でなくては なりません。
constant-subobjectについて、最初のobject-ref 中の名前は定数名 (すなわちPARAMETER)でなくてはなりません。

object はそのすべてのobject-ref がスカラである場合に限りスカラです。 0でない次元数を持ったobject-ref (すなわち配列)にはポインタでないスカラ のobject-ref のみを続けることができます。

array elementは、その最終object-refsection-subscript-list を含むスカラオブジェクトです。ただし個々のsection-subscript はスカラ数式 とします。 例えば

      ARRAY(I,J)
      SCALAR%ARRAY(I,J)
structure componentは複数のobject-ref を持つオブジェクトです。 ただし最終のobject-refsection-subscript-list を持たず、 先行するすべてのobject-ref はスカラとします。 例えば
      SCALAR%SCALAR
      ARRAY(I,J)%SCALAR
substringsubstring-range を持ったスカラオブジェクトです。 例えば
      SCALAR(I:J)
      ARRAY(I,J)(K:L)
whole arrayは一つのobject-ref のみを持った配列オブジェクトです。

array sectionは、最終でないobject-ref が0でない次元数を持つか、また は最終のobject-ref が一つのsection-subscript-list を持ち、その section-subscripts が0でない次元数を持つかtriplet である配列オブジェ クトです。 例えば

      ARRAY(2:M)
      ARRAY%SCALAR

配列構成子

array-constructor ::= (/ ac-item [ , ac-item ] ... /)

ac-item ::= expr | ac-implied-do

ac-implied-do ::= ( expr [ , expr ] ... , name = expr , expr [ , expr ] )

注:name は整数変数名ですが、その値は配列構成子の実行によって影響されま せん。 配列構成子のすべての数式は同一の型と型パラメータを有していなくてはなりません。 特に文字については、それらは同一長でなくてはなりません。

構造体構成子

structure-constructor ::= name ( expr [ , expr ] ... )

注:name は構造型の名前でなくてはなりません。 個々の数式は対応する構造型成分と代入互換である必要があります。

関数引用

function-reference ::= name ( [ expr [ , expr ] ... ] )

注:name は関数名でなくてはなりません。

© 日本ニューメリカルアルゴリズムズグループ株式会社 2025
Privacy Policy  /  Trademarks