附录C FORTRAN95语法
在本附录我们给出FORTRAN95的语法规则(ISO/IEC 1559-1:1997(E))。所谓语法规则,就是描述一切FORTRAN95的词汇,语句,结构等语言成分的形式规则,凡是遵循了这个描述的,就是合法的FORTRAN95语言;否则,就是不合法的。
因此语法规则本身必须是精确的,绝对不能产生歧义。在这种要求下,FORTRAN95的语法采用了形式语言的方式给出语法规则,即属于所谓Backus-Naur形式(BNF)的一种变体。
由于这种描述形式本身采用了语言的形式,因此有几点说明如下:
●在描述语法时,对于属于FORTRAN字符集的字符按照字面形式来理解,除非有特别的说明。
●对于每一个语法成分的描述,都有一个唯一的编号,这个编号的采用了如下的一般形式:
Rxyy
其中的R表示规则,而x表示FORTRAN
的节号,yy表示对于该语法成分的描述在该节的唯一编号,因此对于每一个语法成分的描述,这个Rxyy可以看成是它的唯一编号,全书的正文当中,每当第一次引入一个语法成分,我们总是给出了它的这个编号。在下面的规则表里面,这个编号简写为纯数字,省略了字母R。
●下面的描述当中,为了简洁起见,采用了如下的缩写:
argument……arg
attribute……..attr
declaration…..decl
definition……def
descriptor……desc
expression…..expr
integer………int
operator……..op
specifier…….spec
statement……stmt
●同样为了简洁的缘故,这里给出的形式描述不可能是绝对完备和精确的,在能够理解的前提下,本附录采用了一定的简化形式,并且在FORTRAN标准的基础上作了一定的节略。
●除了文字之外,还使用了来自FORTRAN字符集的如下特殊符号;另外还使用了|表示或者的意思。
+ 加号
% 百分号
- 减号
& and
* 星号
; 分号
/ 除号或斜线
‘ 省略符号
< 小于
“ 引号
> 大于
. 小数点或句号
( 左括号
= 等号
) 右括号
! 叹号
| 或者
FORTRAN95的语法规则(ISO/IEC 1559-1:1997(E))
语法成分
形式描述
编号
access-id
use-name
| generic-spec
523
access-spec
PUBLIC
| PRIVATE
511
access-stmt
access-spec [ [ :: ] access-id-list ]
522
ac-do-variable
scalar-int-variable
436
ac-implied-do
( ac-value-list, ac-implied-do-control )
434
ac-implied-do-control
ac-do-variable = scalar-int-expr , scalar-int-expr [ , scalar-int-expr ]
435
action-stmt
allocate-stmt
| assignment-stmt
| backspace-stmt
| call-stmt
| close-stmt
| continue-stmt
| cycle-stmt
| deallocate-stmt
| endfile-stmt
| end-function-stmt
| end-program-stmt
| end-subroutine-stmt
| exit-stmt
| forall-stmt
| goto-stmt
| if-stmt
| inquire-stmt
| nullify-stmt
| open-stmt
| pointer-assignment-stmt
| print-stmt
| read-stmt
| return-stmt
| rewind-stmt
| stop-stmt
| where-stmt
| write-stmt
216
actual-arg
Expr
| variable
| procedure-name
1214
actual-arg-spec
[ keyword = ] actual-arg
1212
ac-value
Expr
| ac-implied-do
433
add-op
+
| -
710
add-operand
[ add-operand mult-op ] mult-operand
706
allocatable-stmt
ALLOCATABLE [ :: ] array-name [ ( deferred-shape-spec-list ) ]
{ , array-name [ ( deferred-shape-spec-list ) ] }
527
allocate-lower-bound
scalar-int-expr
627
allocate-object
variable-name
| structure-component
625
allocate-shape-spec
[ allocate-lower-bound : ] allocate-upper-bound
626
allocate-stmt
ALLOCATE ( allocation-list [ , STAT = stat-variable ] )
622
allocate-upper-bound
scalar-int-expr
628
allocation allocate-object
[ ( allocate-shape-spec-list ) ]
624
alphanumeric-character
Letter
| digit
| underscore
302
and-op
.AND.
720
and-operand
[ not-op ] level-4-expr
715
array-constructor
( / ac-value-list / )
432
array-element
data-ref
615
array-section
dataref [ ( substringrange ) ]
616
array-spec
explicit-shape-spec-list
| assumed-shape-spec-list
| deferred-shape-spec-list
| assumed-size-spec
513
assignment-stmt
variable = expr
735
assumed-shape-spec
[ lower-bound ] :
517
assumed-shape-spec-list
assumed-shape-spec { assumed-shape-spec }
0
assumed-size-spec
[ explicit-shape-spec-list , ] [ lower-bound : ] *
519
attr-spec
PARAMETER
| access-spec
| ALLOCATABLE
| DIMENSION (array-spec )
| EXTERNAL
| INTENT ( intent-spec )
| INTRINSIC
| OPTIONAL
| POINTER
| SAVE
| TARGET
503
backspace-stmt
BACKSPACE external-file-unit
| BACKSPACE ( position-spec-list )
919
binary-constant
B ' digit { digit } '
| B "digit { digit } "
408
blank-interp-edit-desc
BN
| BZ
1015
block
{ execution-part-construct }
801
block-data
block-data-stmt [specification-part] end-block-data-stmt
1112
block-data-stmt
BLOCK DATA [block-data-name]
1113
block-do-construct
do-stmt do-block end-do
817
boz-literal-constant
binary-constant
| octal-constant
| hex-constant
407
call-stmt
CALL subroutine-name [ ( [ actual-arg-spec-list ] ) ]
1211
case-construct
select-case-stmt { case-stmt block } end-select-stmt
808
case-expr
scalar-int-expr
| scalar-char-expr
| scalar-logical-expr
812
case-selector
( case-value-range-list )
| DEFAULT
813
case-stmt
CASE case-selector [ case-construct-name ]
810
case-value
scalar-int-initialization-expr
| scalar-char-initialization-expr
| scalar-logical-initialization-expr
815
case-value-range
case-value
| case-value :
| : case-value
| case-value : case-value
814
case-value-range-list
case-value-range { case-value-range }
0
char-constant
constant
309
char-expr
expr
726
char-initialization-exr
char-expr
731
char-length
( char-len-param-value )
| scalar-int-literal-constant
509
char-len-param-value
specification-expr
| *
| :
510
char-literal-constant
[ _kind-param ] ' { rep-char } '
| [ _kind-param ] " { rep-char } "
420
char-selector
length-selector
| (LEN = char-len-param-value, KIND = scalar-int-initialization-expr )
| ( char-len-param-value, [ KIND = ] scalar-int-initialization-expr )
| (KIND = scalar-int-initialization-expr [, LEN = char-len-param-value ] )
507
char-string-edit-desc
char-literal-constant
1016
char-variable
variable
605
close-spec
[ UNIT = ] external-file-unit
| IOSTAT = scalar-default-int-variable
| ERR = label
| STATUS = scalar-default-char-expr
908
close-stmt
CLOSE ( close-spec-list )
907
common-block-object
variable-name [ ( explicit-shape-spec-list ) ]
530
common-stmt
COMMON [ / [ common-block-name ] / ] common-block-object-list
{ [,] / [ common-block-name ] / common-block object-list }
549
complex-literal-constant
( real-part , imag-part )
417
component-array-spec
explicit-shape-spec-list
| deferred-shape-spec-list
427
component-attr-spec
POINTER
| DIMENSION ( component-array-spec )
426
component-attr-spec-list
component-attr-spec { component-attr-spec }
0
component-decl
component-name [ ( component-array-spec ) ] [ * char-length ] [ component-initialization ]
428
component-decl-list
component-decl { component-decl }
0
component-def-stmt
type-spec [ [ , component-attr-spec-list ] :: ] component-decl-list
425
component-initialization
= initialization-expr
| => NULL ()
429
concat-op
//
712
connect-spec
[ UNIT = ] external-file-unit
| IOSTAT = scalar-default-int-variable
| ERR = label
| FILE = file-name-expr
| STATUS = scalar-default-char-expr
| ACCESS = scalar-default-char-expr
| FORM = scalar-default-char-expr
| RECL = scalar-int-expr
| BLANK = scalar-default-char-expr
| POSITION = scalar-default-char-expr
| ACTION = scalar-default-char-expr
| DELIM = scalar-default-char-expr
| PAD = scalar-default-char-expr
905
constant
literal-constant
| named-constant
305
constant-subobject
subobject
702
contains-stmt
CONTAINS
1227
continue-stmt
CONTINUE
839
control-edit-desc
position-edit-desc
| [ r ] /
| :
| sign-edit-desc
| k P
| blank-interp-edit-desc
1010
cycle-stmt
CYCLE [ do-construct-name ]
834
d
int-literal-constant
1008
data-edit-desc
I w [ . m ]
| B w [ . m ]
| O w [ . m ]
| Z w [ . m ]
| F w . d
| E w . d [ E e ]
| EN w . d [ E e ]
| ES w . d [ E e ]
| G w . d [ E e ]
| L w
| A [ w ]
| D w . d
1005
Data-i-do-object
Array-element
| scalarstructurecomponent
| dataimplieddo
536
Data-i-do-variable
Scalar-int-variable
537
Data-implied-do
( data-i-do-object-list, data-i-do-variable = scalar-int-expr
scalar-int-expr [ , scalar-int-expr] )
535
data-ref
part-ref { % part-ref }
612
data-stmt
DATA data-stmt-set { [ , ] data-stmt-set }
532
data-stmt-constant
scalar-constant
| scalar-constant-subobject
| signed-int-literal-constant
| signed-real-literal-constant
| NULL ( )
| structure-constructor
| entry-stmt
540
Data-stmt-object
variable
| data-implied-do
534
data-stmt-object-list
data-stmt-object { data-stmt-object }
0
datastmtrepeat
Scalar-int-constant
| scalar-int-constant-subobject
539
data-stmt-set
data-stmt-object-list / data-stmt-value-list /
533
Data-stmt-value
[ data-stmt-repeat* ] data-stmt-constant
538
data-stmt-value-list
data-stmt-value { data-stmt-value }
0
deallocate-stmt
DEALLOCATE ( allocate-object-list [, STAT = stat-variable ] )
631
declaration-construct
derived-type-def
| interface-block
| type-declaration-stmt
| specification-stmt
| parameter-stmt
| format-stmt
| entry-stmt
| stmt-function-stmt
207
default-char-expr
expr
727
Default-char-variable
variable
606
default-int-variable
variable
608
default-logical-variable
variable
604
deferred-shape-spec
:
518
defined-binary-op
. letter { letter }.
724
defined-operator
defined-binary-op
| defined-unary-op
| extended-intrinsic-op
311
defined-unary-op
. letter { letter }.
704
derived-type-def
derived-type-stmt { private-sequence-stmt } component-def-stmt { component-def-stmt } end-type-stmt
422
derived-type-stmt
TYPE [ [ , access-spec ] ] type-name
423
digit-string
digit { digit }
402
dimension-stmt
DIMENSION [ :: ] array-name ( array-spec ) { , array-name ( array-spec ) }
526
do-block
block
823
do-construct
block-do-construct
816
do-construct-name
name
0
do-stmt
label-do-stmt
| nonlabel-do-stmt
818
do-variable
scalar-int-variable
822
dummy-arg
dummy-arg-name
| *
1223
e
int-literal-constant
1009
else-if-stmt
ELSE IF ( scalar-logical-expr ) THEN [ if-construct-name ]
804
else-stmt
ELSE [ if-construct-name ]
805
elsewhere-stmt
ELSEWHERE [ where-construct-name ]
745
end-block-data-stmt
END [BLOCK DATA [block-data-name]]
1114
end-do
end-do-stmt
| continue-stmt
824
end-do-stmt
END DO [ do-construct-name ]
825
endfile-stmt
ENDFILE external-file-unit
920
end-forall-stmt
END FORALL [ forall-construct-name ]
753
end-function-stmt
END [ FUNCTION [ function-name ]]
1220
end-if-stmt
END IF [ if-construct-name ]
806
end-interface-stmt
END INTERFACE [ generic-spec ]
1204
end-module-stmt
END [MODULE [ module-name]]
1106
end-program-stmt
END [PROGRAM [ program-name]]
1103
end-select-stmt
END SELECT [ select-case-construct-name ]
811
end-subroutine-stmt
END [ SUBROUTINE [ subroutine-name ]]
1224
end-type-stmt
END TYPE [ type-name ]
430
end-where-stmt
END WHERE [ where-construct-name ]
746
entity-decl
object-name [ ( array-spec ) ] [ * char-length ] [ initialization ]
| function-name [ * char-length ]
504
entry-stmt
ENTRY entry-name [ ( [ dummy-arg-list ] ) [ RESULT ( result-name ) ] ]
1225
enum-def equivalence-object
type-alias-name ( enumerator-list )
| variable-name
| array-element
| substring
0
548
equivalence-set
( equivalence-object, equivalence-object-list )
547
equivalence-set-list
equivalence-set { equivalence-set }
0
equivalence-stmt
EQUIVALENCE equivalence-set-list
546
equiv-op
.EQ.
| .NEQ.
722
equiv-operand
[ equiv-operand or-op ] or-operand
717
executable-construct
action-stmt
| case-construct
| do-construct
| forall-construct
| if-construct
| where-construct
215
execution-part
executable-construct {execution-part-construct}
208
execution-part-construct
executable-construct
| format-stmt
| entry-stmt
| data stmt (check still present)
209
exit-stmt
EXIT [ do-construct-name ]
835
explicit-shape-spec
[ lower-bound : ] upper-bound
514
exponent
signed-digit-string
406
exponent-letter
E
| D
415
expr
[ expr defined-binary-op ] level-5-expr
723
extended-intrinsic-op
intrinsic-operator
312
external-file -unit
scalar-int-expr
902
external-name-list
external-name { external-name }
0
external-stmt
EXTERNAL [ :: ] external-name-list
1208
external-subprogram
function-subprogram
| subroutine-subprogram
203
file-name-expr
scalar-default-char-expr
906
forall-assignment-stmt
assignment-stmt
| pointer-assignment-stmt
752
forall-body-construct
forall-assignment-stmt
| where-stmt
| where-construct
| forall-construct
| forall-stmt
751
forall-construct
forall-construct-stmt { forall-body-construct } end-forall-stmt
747
forall-construct-name
name
0
forall-construct-stmt
[ forall-construct-name : ] FORALL forall-header
748
forall-header
( forall-triplet-spec-list [, scalar-mask-expr ] )
749
forall-stmt
FORALL forall-header forall-assignment-stmt
754
forall-triplet-spec
index-name = subscript : subscript [ : stride ]
750
format
default-char-expr
| label
| *
913
format-item
[ r ] data-edit-desc
| control-edit-desc
| char-string-edit-desc
| [ r ] ( format-item-list )
1003
format-item-list
format-item { format-item }
0
format-specification
( [ format-item-list ) ] )
1002
format-stmt
FORMAT format-specification
1001
function-name
name
0
function-reference
function-name ( [ actual-arg-spec-list ] )
1210
function-stmt
[ prefix ] FUNCTION function-name ( [ dummy-arg-name-list ] ) [ RESULT ( result-name ) ]
1217
function-subprogram
function-stmt [specification-part] [execution-part] [internal-subprogram-part] end-function-stmt
1216
generic-spec
generic-name
| OPERATOR ( defined-operator )
| ASSIGNMENT ( = )
1207
goto-stmt
GO TO label
836
hex-constant
Z ' hex-digit { hex-digit } '
| Z " hex-digit { hex-digit } "
410
hex-digit
digit
| A
| B
| C
| D
| E
| F
411
if-construct
if-then-stmt block { else-if-stmt block } [ else-stmt block ] end-if-stmt
802
if-construct-name
name
0
if-stmt
IF ( scalar-logical-expr ) action-stmt
807
if-then-stmt
[ if-construct-name : ] IF ( scalar-logical-expr )
THEN
803
imag-part
signed-int-literal-constant
| signed-real-literal-constant
419
implicit-part
{ implicit-part-stmt } implicit-stmt
205
implicit-part-stmt
implicit-stmt
| parameter-stmt
| format-stmt
| entry-stmt
206
implicit-spec
type-spec ( letter-spec-list )
542
implicit-stmt
IMPLICIT implicit-spec-list
| IMPLICIT NONE
541
initialization
initialization-expr
| => NULL()
505
initialization-expr
expr
730
input-item
variable
| io-implied-do
914
input-item-list
input-item { input-item }
0
inquire-spec
[ UNIT = ] external-file-unit
| FILE = file-name-expr
| IOSTAT = scalar-default-int-variable
| ERR = label
| EXIST = scalar-default-logical-variable
| OPENED = scalar-default-logical-variable
| NUMBER = scalar-default-int-variable
| NAMED = scalar-default-logical-variable
| NAME = scalar-default-char-variable
| ACCESS = scalar-default-char-variable
| SEQUENTIAL = scalar-default-char-variable
| DIRECT = scalar-default-char-variable
| FORM = scalar-default-char-variable
| FORMATTED = scalar-default-char-variable
| UNFORMATTED = scalar-default-char-variable
| RECL = scalar-default-int-variable
| NEXTREC = scalar-default-int-variable
| BLANK = scalar-default-char-variable
| POSITION = scalar-default-char-variable
| ACTION = scalar-default-char-variable
| READ = scalar-default-char-variable
| WRITE = scalar-default-char-variable
| READWRITE = scalar-default-char-variable
| DELIM = scalar-default-char-variable
| PAD = scalar-default-char-variable
924
inquire-spec-list
inquire-spec { inquire-spec }
0
inquire-stmt
INQUIRE ( inquire-spec-list )
| INQUIRE ( IOLENGTH = scalar-default-int-variable ) output-item-list
923
int-constant
constant
308
intent-spec
IN
| OUT
| INOUT
512
intent-stmt
INTENT ( intent-spec ) [ :: ] dummy-arg-name-list
520
interface-block
interface-stmt { interface-specification } end-interface-stmt
1201
interface-body
function-stmt [ specification-part ] end-function-stmt
| subroutine-stmt [ specification-part ] end-subroutine-stmt
1205
interface-specification
interface-body
| module-procedure-stmt
1202
interface-stmt
INTERFACE [generic-spec]
1203
internal-file-unit
default-char-variable
903
internal-subprogram
function-subprogram
| subroutine-subprogram
211
internal-subprogram-part
contains-stmt internal-subprogram {internal-subprogram}
210
int-expr
expr
728
int-initialization-expr
int-expr
732
int-literal-constant
digit-string [ _ kind-param ]
404
intrinsic-operator
power-op
| mult-op
| add-op
| concat-op
| rel-op
| not-op
| and-op
| or-op
| equiv-op
310
intrinsic-procedure-name-list
intrinsic-procedure-name { intrinsic-procedure-name }
0
intrinsic-stmt
INTRINSIC [ :: ] intrinsic-procedure-name-list
1209
int-variable
variable
607
io-control-spec
[ UNIT = ] io-unit
| [ FMT = ] format
| [ NML = ] namelist-group-name
| REC = scalar-int-expr
| IOSTAT = scalar-default-int-variable
| ERR = label
| END = label
| ADVANCE = scalar-default-char-expr
| SIZE = scalar-default-int-variable
| EOR = label
912
io-implied-do
( io-implied-do-object-list , io-implied-do-control )
916
io-implied-do-control
do-variable = scalar-int-expr, scalar-int-expr
[ , scalar-int-expr ]
918
io-implied-do-object
input-item
| output-item
917
io-unit
external-file-unit
| *
| internal-file-unit
901
k
signed-int-literal-constant
1011
keyword
dummy-arg-name
1213
kind-param
digit-string
| scalar-int-constant-name
405
kind-selector
( [ KIND = ] scalar-int-initialization-expr )
506
label
digit [ digit [ digit [ digit [ digit ]]]]]
313
label-do-stmt
[ do-construct-name : ] DO label [ loop-control ]
819
Length-selector
( [ LEN = ] charlenparamvalue)
| * char-length [ , ]
508
Letter-spec
letter [ - letter ]
543
level-1-expr
[ defined-unary-op ] primary
703
level-2-expr
[ [ level-2-expr ] add-op ] add-operand
707
level-3-expr
[ level-3-expr concat-op ] level-2-expr
711
level-4-expr
[ level-3-expr rel-op ] level-3-expr
713
level-5-expr
[ level-5-expr equiv-op ] equiv-operand
718
literal-constant
int-literal-constant
| real-literal-constant
| complex-literal-constant
| logical-literal-constant
| char-literal-constant
| boz-literal-constant
306
local-name
name
0
logical-expr
expr
725
logical-initialization-expr
logical-expr
733
logical-literal-constant
.TRUE. [ _kind-param ]
| . FALSE. [ _kind-param ]
421
logical-variable
variable
603
loop-control
[ , ] do-variable = scalar-int-expr , scalar-int-expr
[ , scalar-int-expr ]
| [ , ] WHILE scalar-logical-expr
821
lower-bound
specification-expr
515
m
int-literal-constant
1007
main-program
[program-stmt] [specification-part] [execution-part] [internal-subprogram-part] end-program-stmt
1101
masked-elsewhere-stmt
ELSEWHERE ( mask-expr ) [ where-construct-name ]
744
mask-expr
logical-expr
743
module
module-stmt [specification-part] [module-subprogram-part] end-module-stmt
1104
module-procedure-stmt
MODULE PROCEDURE procedure-name-list
1206
module-stmt
MODULE module-name
1105
module-subprogram
function-subprogram
| subroutine-subprogram
213
module-subprogram-part
contains-stmt module-subprogram {module-subprogram}
212
mult-op
*
| /
709
mult-operand
level-1-expr [ power-op mult-operand ]
705
n
int-literal-constant
1013
name
letter (alphanumeric-character }
304
named-constant
name
307
named-constant-def
named-constant = initialization
531
namelist-group-name
name
0
namelist-group-object
variable-name
545
namelist-group-object-list
namelist-group-object {namelist-group-object }
0
namelist-stmt
NAMELIST / namelist-group-name / namelist-group-object-list
{ [ , ] / namelist-group-name / namelist-group-object-list }
544
nonlabel-do-stmt
[ do-construct-name : ] DO [ loop-control ]
820
not-op
.NOT.
719
nullify-stmt
NULLIFY ( pointer-object-list )
629
numeric-e xpr
expr
729
object-name
name
0
object-name-list
object-name { object-name }
0
octal-constant
O ' digit { digit } '
| O " digit { digit } "
409
only
generic-spec
| only-use-name
| only-rename
1109
only-rename
local-name => use-name
1111
only-use-name
only-name
1110
open-stmt
OPEN ( connect-spec-list )
904
optional-stmt
OPTIONAL [ :: ] dummy-arg-name-list
521
or-op
.OR.
721
or-operand
[ or-operand and-op ] and-operand
716
output-item
expr
| io-implied-do
915
output-item-list
output-item { output-item }
0
parameter-stmt
PARAMETER ( named-constant-def-list )
550
parent-string
scalar-variable-name
| array-element
| scalar-structure-component
| scalar-constant
610
part-ref part-name
[ ( section-subscript-list ) ]
613
pointer-assignment-stmt
pointer-object => target
736
pointer-object
variable-name
| structure-component
630
pointer-object-list
pointer-object { pointer-object }
0
pointer-stmt
POINTER [ :: ] object-name [ ( deferred-shape-spec-list ) ]
{ , object-name [ ( deferred-shape-spec-list ) ] }
528
position-edit-desc
T n
| TL n
| TR n
| n X
1012
position-spec
[ UNIT = ] external-file-unit
| IOSTAT = scalar-default-int-variable
| ERR = label
922
position-spec-list
position-spec { position-spec }
0
power-op
**
708
prefix
prefix-spec { prefix-spec }
1218
prefix-spec
type-spec
| RECURSIVE
| PURE
| ELEMENTAL
1219
primary
constant
| constant-sub-object
| variable
| array-constructor
| structure-constructor
| function-reference
| ( expr )
701
print-stmt
PRINT format [ , output-item-list ]
911
private-sequence-stmt
PRIVATE
| SEQUENCE
424
program
program-unit {program-unit}
201
program-name
name
0
program-stmt
PROGRAM program-name
1102
program-unit
main-program
| external-subprogram
| module
| block-data
202
r
int-literal-constant
1004
read-stmt
READ ( io-control-spec-list ) [ input-item-list ]
READ format [, input-item-list ]
909
real-literal-constant
significand [ exponent-letter exponent ] [ _kind-param ]
| digit-string exponent-letter exponent [ _kind-param ]
413
real-part
signed-int-literal-constant
| signed-real-literal-constant
418
rel-op
.EQ.
|.NE.
|.LT.
|.LE.
|.GT.
|.GE.
| ==
| /=
| <
| <=
| >
| >=
714
rename
local-name => use-name
1108
result-name
name
0
return-stmt
RETURN [ scalar-int-expr ]
1226
rewind-stmt
REWIND external-file-unit
| REWIND ( position-spec-list )
921
saved-entity
object-name
| / common-block-name /
525
saved-entity-list
saved-entity { saved-entity }
0
save-stmt
SAVE [ [ :: ] saved-entity-list ]
524
scalar-default-int-variable
scalar-int-variable
0
scalar-int-expr
expr
0
scalar-int-initialization-expr
expr
0
scalar-logical-expr
expr
0
sectionsubscript
subscript
| subscripttriplet
| vectorsubscript
618
select-case-construct-name
name
0
select-case-stmt
[ case-construct-name : ] SELECT CASE ( case-expr )
809
select-construct-name
name
0
sign
+
| -
416
signed-digit-string
[ sign ] digit-string
401
signed-int-literal-constant
[ sign ] int-literal-constant
403
sign-edit-desc
S
| SP
| SS
1014
signed-real-literal-constant
[ sign ] real-literal-constant
412
significand
digit-string . [ digit-string ]
| . digit-string
414
414
specification-expr
scalar-int-expr
734
specification-part
{ use-stmt } [ implicit-part ] { declaration-construct }
204
specification-stmt
access-stmt
| allocatable-stmt
| common-stmt
| data-stmt
| dimension-stmt
| equivalence-stmt
| external-stmt
| intent-stmt
| intrinsic-stmt
| namelist-stmt
| optional-stmt
| pointer-stmt
| save-stmt
| target-stmt
214
stat-variable
scalar-int-variable
623
stmt-function-stmt
function-name ( [ dummy-arg-name-list ] ) = scalar-expr
1228
stop-code
scalar-char-constant
| digit [ digit [ digit [ digit [ digit ]]]]
841
stop-stmt
STOP [ stop-code ]
840
stride
scalar-int-expr
620
structure-component
data-ref
614
structure-constructor
type-name ( expr-list )
431
subobject
array-element
| array-section
| structure-component
| substring
602
subroutine-stmt
[ prefix ] SUBROUTINE subroutine-name [ ( [ dummy-arg-list ] ) ]
1222
subroutine-subprogram
subroutine-stmt [specification-part] [execution-part] [internal-subprogram-part] end-subroutine-stmt
1221
subscript
scalar-int-expr
617
Subscript-triplet
[ subscript] : [subscript ] [ :stride ]
619
substring
parent-string ( substring-range )
609
substring-range
[ scalar-int-expr ] : [scalar-int-expr ]
611
target
variable
| expr
737
target-stmt
TARGET [ :: ] object-name [ ( array-spec ) ] { , object-name [ ( array-spec ) ] }
529
type-declaration-stmt
type-spec [ { , attr-spec } :: ] entity-decl-list
501
type-name
name
0
type-spec
INTEGER [ kind-selector ]
| REAL [ kind-selector ]
| DOUBLE PRECISION
| COMPLEX [ kind-selector ]
| CHARACTER [char-selector ]
| LOGICAL [ kind-selector ]
| TYPE ( type-name )
502
underscore
_
303
Upper-bound
Specification-expr
516
use-name
name
0
use-stmt
USE module-name [ , rename-list ]
| USE module-name , ONLY : [only-list]
1107
variable
scalar-variable-name
| array-variable-name
| subobject
601
Vectorsub-script
intexpr
621
w
int-literal-constant
1006
where-assignment-stmt
assignment-stmt
742
where-body-construct
where-assignment-stmt
| where-stmt
| where-construct
741
741
where-construct
where-construct-stmt
{ where-body-construct }
{ masked-elsewhere-stmt { where-body-construct } }
{ elsewhere-stmt { where-body-construct } }
end-where-stmt
739
where-construct-name
name
0
where-construct-stmt
[ where-construct-name: ] WHERE ( mask-expr )
740
where-stmt
WHERE ( mask-expr ) where-assignment-stmt
738
write-stmt
WRITE ( io-control-spec-list ) [ output-item-list ]
910