R201 program is program-unit [ program-unit ] ... R202 program-unit is main-program or external-subprogram or module or block-data R203 external-subprogram is function-subprogram or subroutine-subprogram R204 specification-part is [ use-stmt ] ... [ import-stmt ] ... [ implicit-part ] [ declaration-construct ] ... R205 implicit-part is [ implicit-part-stmt ] ... implicit-stmt R206 implicit-part-stmt is implicit-stmt or parameter-stmt or format-stmt or entry-stmt R207 declaration-construct is derived-type-def or type-alias-stmt or interface-block or type-declaration-stmt or procedure-declaration-stmt or specification-stmt or parameter-stmt or enum-alias-def or format-stmt or entry-stmt or stmt-function-stmt R208 execution-part is executable-construct [ execution-part-construct ] ... R209 execution-part-construct is executable-construct or format-stmt or entry-stmt or data-stmt R210 internal-subprogram-part is contains-stmt internal-subprogram [ internal-subprogram ] ... R211 internal-subprogram is function-subprogram or subroutine-subprogram R212 module-subprogram-part is contains-stmt module-subprogram [ module-subprogram ] ... R213 module-subprogram is function-subprogram or subroutine-subprogram R214 specification-stmt is access-stmt or allocatable-stmt or asynchronous-stmt or bind-stmt or common-stmt or data-stmt or dimension-stmt or equivalence-stmt or external-stmt or intent-stmt or intrinsic-stmt or namelist-stmt or optional-stmt or pointer-stmt or save-stmt or target-stmt or volatile-stmt or value-stmt R215 executable-construct is action-stmt or associate-construct or case-construct or do-construct or forall-construct or if-construct or select-type-construct or where-construct R216 action-stmt is allocate-stmt or assignment-stmt or backspace-stmt or call-stmt or close-stmt or continue-stmt or cycle-stmt or deallocate-stmt or endfile-stmt or end-function-stmt or end-program-stmt or end-subroutine-stmt or exit-stmt or forall-stmt or goto-stmt or if-stmt or inquire-stmt or nullify-stmt or open-stmt or pointer-assignment-stmt or print-stmt or read-stmt or return-stmt or rewind-stmt or stop-stmt or where-stmt or write-stmt or arithmetic-if-stmt or computed-goto-stmt R301 character is alphanumeric-character or special-character R302 alphanumeric-character is letter or digit or underscore R303 underscore is _ R304 name is letter [ alphanumeric-character ] ... R305 constant is literal-constant or named-constant R306 literal-constant is int-literal-constant or real-literal-constant or complex-literal-constant or logical-literal-constant or char-literal-constant or boz-literal-constant R307 named-constant is name R308 int-constant is constant R309 char-constant is constant R310 intrinsic-operator is power-op or mult-op or add-op or concat-op or rel-op or not-op or and-op or or-op or equiv-op R311 defined-operator is defined-unary-op or defined-binary-op or extended-intrinsic-op R312 extended-intrinsic-op is intrinsic-operator R313 label is digit [ digit [ digit [ digit [ digit ] ] ] ] R314 type-param-value is scalar-int-expr or * or : R401 signed-digit-string is [ sign ] digit-string R402 digit-string is digit [ digit ] ... R403 signed-int-literal-constant is [ sign ] int-literal-constant R404 int-literal-constant is digit-string [ _ kind-param ] R405 kind-param is digit-string or scalar-int-constant-name R406 sign is + or - R407 boz-literal-constant is binary-constant or octal-constant or hex-constant R408 binary-constant is B ' digit [ digit ] ... ' or B " digit [ digit ] ... " R409 octal-constant is O ' digit [ digit ] ... ' or O " digit [ digit ] ... " R410 hex-constant is Z ' hex-digit [ hex-digit ] ... ' or Z " hex-digit [ hex-digit ] ... " R411 hex-digit is digit or A or B or C or D or E or F R412 signed-real-literal-constant is [ sign ] real-literal-constant R413 real-literal-constant is significand [ exponent-letter exponent ] [ _ kind-param ] or digit-string exponent-letter exponent [ _ kind-param ] R414 significand is digit-string . [ digit-string ] or . digit-string R415 exponent-letter is E or D R416 exponent is signed-digit-string R417 complex-literal-constant is ( real-part , imag-part ) R418 real-part is signed-int-literal-constant or signed-real-literal-constant or named-constant R419 imag-part is signed-int-literal-constant or signed-real-literal-constant or named-constant R420 char-literal-constant is [ kind-param _ ] ' [ rep-char ] ... ' or [ kind-param _ ] " [ rep-char ] ... " R421 logical-literal-constant is .TRUE. [ _ kind-param ] or .FALSE. [ _ kind-param ] R422 derived-type-def is derived-type-stmt [ type-param-def-stmt ] ... [ data-component-part ] [ type-bound-procedure-part ] end-type-stmt R423 derived-type-stmt is TYPE [ [ , type-attr-spec-list ] :: ] type-name & &[ ( type-param-name-list ) ] R424 type-attr-spec is access-spec or EXTENSIBLE or EXTENDS ( parent-type-name ) or BIND (C) R425 type-param-def-stmt is INTEGER [ kind-selector ] [ [, type-param-attr-spec ] :: ] & & type-param-name-list R426 type-param-attr-spec is KIND or NONKIND R427 data-component-part is [ private-sequence-stmt ] ... [ component-def-stmt ] ... R428 private-sequence-stmt is PRIVATE or SEQUENCE R429 component-def-stmt is data-component-def-stmt or proc-component-def-stmt R430 data-component-def-stmt is declaration-type-spec [ [ , component-attr-spec-list ] :: ] & & component-decl-list R431 component-attr-spec is POINTER or DIMENSION ( component-array-spec ) or ALLOCATABLE or access-spec R432 component-decl is component-name [ ( component-array-spec ) ] & & [ * char-length ] [ component-initialization ] R433 component-array-spec is explicit-shape-spec-list or deferred-shape-spec-list R434 component-initialization is = initialization-expr or => NULL ( ) R435 proc-component-def-stmt is PROCEDURE ( [ proc-interface ] ) , & & proc-component-attr-spec-list :: proc-decl-list R436 proc-component-attr-spec is POINTER or PASS_OBJ or access-spec R437 type-bound-procedure-part is contains-stmt [ binding-private-stmt ] proc-binding-construct [ proc-binding-construct ] ... R438 binding-private-stmt is PRIVATE R439 proc-binding-construct is proc-binding or select-kind-construct R440 proc-binding is PROCEDURE [ ( proc-interface-name ) ] & & [ [ , binding-attr-list ] :: ] binding-name [ => binding ] R441 binding-attr is PASS_OBJ or NON_OVERRIDABLE or access-spec R442 binding is procedure-name or NULL() R443 select-kind-construct is select-kind-stmt [ case-stmt [ proc-binding-construct ] ... ] ... end-select-kind-stmt R444 select-kind-stmt is SELECT CASE ( scalar-initialization-expr ) R445 end-select-kind-stmt is END SELECT R446 end-type-stmt is END TYPE [ type-name ] R447 derived-type-spec is type-name [ ( type-param-spec-list ) ] or type-alias-name R448 type-param-spec is [ keyword = ] type-param-value R449 structure-constructor is derived-type-spec ( [ component-spec-list ] ) R450 component-spec is [ keyword = ] expr R451 type-alias-stmt is TYPEALIAS :: type-alias-list R452 type-alias is type-alias-name => declaration-type-spec R453 enum-alias-def is enum-def-stmt enumerator-def-stmt [ enumerator-def-stmt ] ... end-enum-stmt R454 enum-def-stmt is ENUM, BIND(C) :: type-alias-name or ENUM [ kind-selector ] [ :: ] type-alias-name R455 enumerator-def-stmt is ENUMERATOR [ :: ] enumerator-list R456 enumerator is named-constant [ = scalar-int-initialization-expr ] R457 end-enum-stmt is END ENUM [ type-alias-name ] R458 array-constructor is (/ [ type-spec :: ] [ ac-value-list ] /) R459 ac-value is expr or ac-implied-do R460 ac-implied-do is ( ac-value-list , ac-implied-do-control ) R461 ac-implied-do-control is ac-do-variable = scalar-int-expr , scalar-int-expr & & [ , scalar-int-expr ] R462 ac-do-variable is scalar-int-variable R501 type-declaration-stmt is declaration-type-spec [ [ , attr-spec ] ... :: ] entity-decl-list R502 declaration-type-spec is type-spec or CLASS ( derived-type-spec ) or CLASS ( * ) R503 type-spec is INTEGER [ kind-selector ] or REAL [ kind-selector ] or DOUBLE PRECISION or COMPLEX [ kind-selector ] or CHARACTER [ char-selector ] or LOGICAL [ kind-selector ] or TYPE ( derived-type-spec ) or TYPE ( type-alias-name ) R504 attr-spec is PARAMETER or access-spec or ALLOCATABLE or ASYNCHRONOUS or DIMENSION ( array-spec ) or EXTERNAL or INTENT ( intent-spec ) or INTRINSIC or language-binding-spec or OPTIONAL or POINTER or SAVE or TARGET or VOLATILE or VALUE R505 entity-decl is object-name [ ( array-spec ) ] [ * char-length ] [ initialization ] or function-name [ * char-length ] R506 initialization is = initialization-expr or => NULL ( ) R507 kind-selector is ( [ KIND = ] scalar-int-initialization-expr ) R508 char-selector is length-selector or ( LEN = type-param-value , & & KIND = scalar-int-initialization-expr ) or ( type-param-value , & & [ KIND = ] scalar-int-initialization-expr ) or ( KIND = scalar-int-initialization-expr & & [ , LEN = type-param-value ] ) R509 length-selector is ( [ LEN = ] type-param-value ) or * char-length [ , ] R510 char-length is ( type-param-value ) or scalar-int-literal-constant R511 access-spec is PUBLIC or PRIVATE R512 intent-spec is IN or OUT or INOUT R513 array-spec is explicit-shape-spec-list or assumed-shape-spec-list or deferred-shape-spec-list or assumed-size-spec R514 explicit-shape-spec is [ lower-bound : ] upper-bound R515 lower-bound is specification-expr R516 upper-bound is specification-expr R517 assumed-shape-spec is [ lower-bound ] : R518 deferred-shape-spec is : R519 assumed-size-spec is [ explicit-shape-spec-list , ] [ lower-bound : ] * R520 language-binding-spec is BIND (C [, bind-spec-list ]) R521 bind-spec is NAME = scalar-char-initialization-expr or BINDNAME = scalar-char-initialization-expr R522 intent-stmt is INTENT ( intent-spec ) [ :: ] dummy-arg-name-list R523 optional-stmt is OPTIONAL [ :: ] dummy-arg-name-list R524 access-stmt is access-spec [ [ :: ] access-id-list ] R525 access-id is use-name or generic-spec R526 save-stmt is SAVE [ [ :: ] saved-entity-list ] R527 saved-entity is object-name or / common-block-name / R528 dimension-stmt is DIMENSION [ :: ] array-name ( array-spec ) & & [ , array-name ( array-spec ) ] ... R529 allocatable-stmt is ALLOCATABLE [ :: ] & & object-name [ ( deferred-shape-spec-list ) ] & & [ , object-name [ ( deferred-shape-spec-list ) ] ] ... R530 pointer-stmt is POINTER [ :: ] object-name [ ( deferred-shape-spec-list ) ] & & [ , object-name [ ( deferred-shape-spec-list ) ] ] ... R531 target-stmt is TARGET [ :: ] object-name [ ( array-spec ) ] & & [ , object-name [ ( array-spec ) ] ] ... R532 parameter-stmt is PARAMETER ( named-constant-def-list ) R533 named-constant-def is named-constant = initialization-expr R534 asynchronous-stmt is ASYNCHRONOUS [ :: ] object-name-list R535 volatile-stmt is VOLATILE [ :: ] object-name-list R536 value-stmt is VALUE [ :: ] dummy-arg-name-list R537 bind-stmt is language-binding-spec [ :: ] bind-entity-list R538 bind-entity is object-name or / common-block-name / R539 data-stmt is DATA data-stmt-set [ [ , ] data-stmt-set ] ... R540 data-stmt-set is data-stmt-object-list / data-stmt-value-list / R541 data-stmt-object is variable or data-implied-do R542 data-implied-do is ( data-i-do-object-list , data-i-do-variable = & & scalar-int-expr , scalar-int-expr [ , scalar-int-expr ] ) R543 data-i-do-object is array-element or scalar-structure-component or data-implied-do R544 data-i-do-variable is scalar-int-variable R545 data-stmt-value is [ data-stmt-repeat * ] data-stmt-constant R546 data-stmt-repeat is scalar-int-constant or scalar-int-constant-subobject R547 data-stmt-constant is scalar-constant or scalar-constant-subobject or signed-int-literal-constant or signed-real-literal-constant or NULL ( ) or structure-constructor R548 implicit-stmt is IMPLICIT implicit-spec-list or IMPLICIT NONE R549 implicit-spec is declaration-type-spec ( letter-spec-list ) R550 letter-spec is letter [ - letter ] R551 namelist-stmt is NAMELIST & & / namelist-group-name / namelist-group-object-list & & [ [ , ] / namelist-group-name / namelist-group-object-list ] ... R552 namelist-group-object is variable-name R553 equivalence-stmt is EQUIVALENCE equivalence-set-list R554 equivalence-set is ( equivalence-object , equivalence-object-list ) R555 equivalence-object is variable-name or array-element or substring R556 common-stmt is COMMON & & [ / [ common-block-name ] / ]common-block-object-list & & [ [ , ] / [ common-block-name ] /common-block-object-list ] ... R557 common-block-object is variable-name [ ( explicit-shape-spec-list ) ] R601 variable is designator R602 designator is object-name or array-element or array-section or structure-component or substring R603 logical-variable is variable R604 default-logical-variable is variable R605 char-variable is variable R606 default-char-variable is variable R607 int-variable is variable R608 default-int-variable is variable R609 substring is parent-string ( substring-range ) R610 parent-string is scalar-variable-name or array-element or scalar-structure-component or scalar-constant R611 substring-range is [ scalar-int-expr ] : [ scalar-int-expr ] R612 data-ref is part-ref [ % part-ref ] ... R613 part-ref is part-name [ ( section-subscript-list ) ] R614 structure-component is data-ref R615 type-param-inquiry is designator % type-param-name R616 array-element is data-ref R617 array-section is data-ref [ ( substring-range ) ] R618 subscript is scalar-int-expr R619 section-subscript is subscript or subscript-triplet or vector-subscript R620 subscript-triplet is [ subscript ] : [ subscript ] [ : stride ] R621 stride is scalar-int-expr R622 vector-subscript is int-expr R623 allocate-stmt is ALLOCATE ( [ type-spec :: ] allocation-list [, alloc-opt-list ] ) R624 alloc-opt is STAT = stat-variable or ERRMSG = errmsg-variable or SOURCE = source-variable R625 stat-variable is scalar-int-variable R626 errmsg-variable is scalar-default-char-variable R627 allocation is allocate-object [ ( allocate-shape-spec-list ) ] R628 allocate-object is variable-name or structure-component R629 allocate-shape-spec is [ allocate-lower-bound : ] allocate-upper-bound R630 allocate-lower-bound is scalar-int-expr R631 allocate-upper-bound is scalar-int-expr R632 source-variable is variable R633 nullify-stmt is NULLIFY ( pointer-object-list ) R634 pointer-object is variable-name or structure-component R635 deallocate-stmt is DEALLOCATE ( allocate-object-list [ , alloc-opt-list ] ) R701 primary is constant or designator or array-constructor or structure-constructor or function-reference or type-param-inquiry or ( expr ) R702 level-1-expr is [ defined-unary-op ] primary R703 defined-unary-op is . letter [ letter ] ... . R704 mult-operand is level-1-expr [ power-op mult-operand ] R705 add-operand is [ add-operand mult-op ] mult-operand R706 level-2-expr is [ [ level-2-expr ] add-op ] add-operand R707 power-op is ** R708 mult-op is * or / R709 add-op is + or - R710 level-3-expr is [ level-3-expr concat-op ] level-2-expr R711 concat-op is // R712 level-4-expr is [ level-3-expr rel-op ] level-3-expr R713 rel-op is .EQ. or .NE. or .LT. or .LE. or .GT. or .GE. or == or /= or < or <= or > or >= R714 and-operand is [ not-op ] level-4-expr R715 or-operand is [ or-operand and-op ] and-operand R716 equiv-operand is [ equiv-operand or-op ] or-operand R717 level-5-expr is [ level-5-expr equiv-op ] equiv-operand R718 not-op is .NOT. R719 and-op is .AND. R720 or-op is .OR. R721 equiv-op is .EQV. or .NEQV. R722 expr is [ expr defined-binary-op ] level-5-expr R723 defined-binary-op is . letter [ letter ] ... . R724 logical-expr is expr R725 char-expr is expr R726 default-char-expr is expr R727 int-expr is expr R728 numeric-expr is expr R729 specification-expr is scalar-int-expr R730 initialization-expr is expr R731 char-initialization-expr is char-expr R732 int-initialization-expr is int-expr R733 logical-initialization-expr is logical-expr R734 assignment-stmt is variable = expr R735 pointer-assignment-stmt is pointer-object [ (bounds-spec-list) ] => target R736 bounds-spec is lower-bound : R737 target is variable or expr or procedure-name R738 where-stmt is WHERE ( mask-expr ) where-assignment-stmt R739 where-construct is where-construct-stmt [ where-body-construct ] ... [ masked-elsewhere-stmt [ where-body-construct ] ... ] ... [ elsewhere-stmt [ where-body-construct ] ... ] end-where-stmt R740 where-construct-stmt is [where-construct-name:] WHERE ( mask-expr ) R741 where-body-construct is where-assignment-stmt or where-stmt or where-construct R742 where-assignment-stmt is assignment-stmt R743 mask-expr is logical-expr R744 masked-elsewhere-stmt is ELSEWHERE (mask-expr) [where-construct-name] R745 elsewhere-stmt is ELSEWHERE [where-construct-name] R746 end-where-stmt is END WHERE [where-construct-name] R747 forall-construct is forall-construct-stmt [forall-body-construct ] ... end-forall-stmt R748 forall-construct-stmt is [forall-construct-name :] FORALL forall-header R749 forall-header is (forall-triplet-spec-list [, scalar-mask-expr] ) R750 forall-triplet-spec is index-name = subscript : subscript [ : stride] R751 forall-body-construct is forall-assignment-stmt or where-stmt or where-construct or forall-construct or forall-stmt R752 forall-assignment-stmt is assignment-stmt or pointer-assignment-stmt R753 end-forall-stmt is END FORALL [forall-construct-name ] R754 forall-stmt is FORALL forall-header forall-assignment-stmt R801 block is [ execution-part-construct ] ... R802 if-construct is if-then-stmt block [ else-if-stmt block ] ... [ else-stmt block ] end-if-stmt R803 if-then-stmt is [ if-construct-name : ] IF ( scalar-logical-expr ) THEN R804 else-if-stmt is ELSE IF ( scalar-logical-expr ) THEN [ if-construct-name ] R805 else-stmt is ELSE [ if-construct-name ] R806 end-if-stmt is END IF [ if-construct-name ] R807 if-stmt is IF ( scalar-logical-expr ) action-stmt R808 case-construct is select-case-stmt [ case-stmt block ] ... end-select-stmt R809 select-case-stmt is [ case-construct-name : ] SELECT CASE ( case-expr ) R810 case-stmt is CASE case-selector [case-construct-name] R811 end-select-stmt is END SELECT [ case-construct-name ] R812 case-expr is scalar-int-expr or scalar-char-expr or scalar-logical-expr R813 case-selector is ( case-value-range-list ) or DEFAULT R814 case-value-range is case-value or case-value : or : case-value or case-value : case-value R815 case-value is scalar-int-initialization-expr or scalar-char-initialization-expr or scalar-logical-initialization-expr R816 select-type-construct is select-type-stmt [ type-guard-stmt block ] ... end-select-type-stmt R817 select-type-stmt is [ select-construct-name : ] SELECT TYPE & & ( [ associate-name => ] selector ) R818 selector is expr or variable R819 type-guard-stmt is TYPE IS ( extensible-type-name ) [ select-construct-name ] or TYPE IN ( extensible-type-name ) [ select-construct-name ] or TYPE DEFAULT [ select-construct-name ] R820 end-select-type-stmt is END SELECT [ select-construct-name ] R821 associate-construct is associate-stmt block end-associate-stmt R822 associate-stmt is [ associate-construct-name : ] ASSOCIATE ( association-list ) R823 association is associate-name => selector R824 end-associate-stmt is END ASSOCIATE [ associate-construct-name ] R825 do-construct is block-do-construct or nonblock-do-construct R826 block-do-construct is do-stmt do-block end-do R827 do-stmt is label-do-stmt or nonlabel-do-stmt R828 label-do-stmt is [ do-construct-name : ] DO label [ loop-control ] R829 nonlabel-do-stmt is [ do-construct-name : ] DO [ loop-control ] R830 loop-control is [ , ] do-variable = scalar-int-expr, scalar-int-expr & & [ , scalar-int-expr ] or [ , ] WHILE ( scalar-logical-expr ) R831 do-variable is scalar-int-variable R832 do-block is block R833 end-do is end-do-stmt or continue-stmt R834 end-do-stmt is END DO [ do-construct-name ] R835 nonblock-do-construct is action-term-do-construct or outer-shared-do-construct R836 action-term-do-construct is label-do-stmt do-body do-term-action-stmt R837 do-body is [ execution-part-construct ] ... R838 do-term-action-stmt is action-stmt R839 outer-shared-do-construct is label-do-stmt do-body shared-term-do-construct R840 shared-term-do-construct is outer-shared-do-construct or inner-shared-do-construct R841 inner-shared-do-construct is label-do-stmt do-body do-term-shared-stmt R842 do-term-shared-stmt is action-stmt R843 cycle-stmt is CYCLE [ do-construct-name ] R844 exit-stmt is EXIT [ do-construct-name ] R845 goto-stmt is GO TO label R846 computed-goto-stmt is GO TO ( label-list ) [ , ] scalar-int-expr R847 arithmetic-if-stmt is IF ( scalar-numeric-expr ) label , label , label R848 continue-stmt is CONTINUE R849 stop-stmt is STOP [ stop-code ] R850 stop-code is scalar-char-constant or digit [ digit [ digit [ digit [ digit ] ] ] ] R901 io-unit is external-file-unit or * or internal-file-unit R902 external-file-unit is scalar-int-expr R903 internal-file-unit is default-char-variable R904 open-stmt is OPEN ( connect-spec-list ) R905 connect-spec is [ UNIT = ] external-file-unit or IOSTAT = scalar-default-int-variable or IOMSG = iomsg-variable or ERR = label or FILE = file-name-expr or STATUS = scalar-default-char-expr or ACCESS = scalar-default-char-expr or FORM = scalar-default-char-expr or RECL = scalar-int-expr or BLANK = scalar-default-char-expr or POSITION = scalar-default-char-expr or ACTION = scalar-default-char-expr or DELIM = scalar-default-char-expr or PAD = scalar-default-char-expr or ASYNCHRONOUS = scalar-default-char-expr or ROUND = scalar-default-char-expr or DECIMAL = scalar-default-char-expr R906 file-name-expr is scalar-default-char-expr R907 iomsg-variable is scalar-default-char-variable R908 close-stmt is CLOSE ( close-spec-list ) R909 close-spec is [ UNIT = ] external-file-unit or IOSTAT = scalar-default-int-variable or IOMSG = iomsg-variable or ERR = label or STATUS = scalar-default-char-expr R910 read-stmt is READ ( io-control-spec-list ) [ input-item-list ] or READ format [ , input-item-list ] R911 write-stmt is WRITE ( io-control-spec-list ) [ output-item-list ] R912 print-stmt is PRINT format [ , output-item-list ] R913 io-control-spec is [ UNIT = ] io-unit or [ FMT = ] format or [ NML = ] namelist-group-name or REC = scalar-int-expr or POS = scalar-int-expr or IOSTAT = scalar-default-int-variable or IOMSG = iomsg-variable or ERR = label or END = label or ADVANCE = scalar-default-char-expr or SIZE = scalar-default-int-variable or EOR = label or ASYNCHRONOUS = scalar-default-char-initialization-expr or ID = scalar-default-int-variable or DECIMAL = scalar-default-char-expr or ROUND = scalar-default-char-expr R914 format is default-char-expr or label or * R915 input-item is variable or io-implied-do R916 output-item is expr or io-implied-do R917 io-implied-do is ( io-implied-do-object-list , io-implied-do-control ) R918 io-implied-do-object is input-item or output-item R919 io-implied-do-control is do-variable = scalar-int-expr , & & scalar-int-expr [ , scalar-int-expr ] R920 wait-stmt is WAIT (wait-spec-list) R921 wait-spec is [ UNIT = ] external-file-unit or IOSTAT = scalar-default-int-variable or IOMSG = iomsg-variable or ERR = label or END = label or EOR = label or ID = scalar-default-int-variable R922 backspace-stmt is BACKSPACE external-file-unit or BACKSPACE ( position-spec-list ) R923 endfile-stmt is ENDFILE external-file-unit or ENDFILE ( position-spec-list ) R924 rewind-stmt is REWIND external-file-unit or REWIND ( position-spec-list ) R925 position-spec is [ UNIT = ] external-file-unit or IOMSG = iomsg-variable or IOSTAT = scalar-default-int-variable or ERR = label R926 inquire-stmt is INQUIRE ( inquire-spec-list ) or INQUIRE ( IOLENGTH = scalar-default-int-variable ) & & output-item-list R927 inquire-spec is [ UNIT = ] external-file-unit or FILE = file-name-expr or IOSTAT = scalar-default-int-variable or IOMSG = iomsg-variable or ERR = label or EXIST = scalar-default-logical-variable or OPENED = scalar-default-logical-variable or NUMBER = scalar-default-int-variable or NAMED = scalar-default-logical-variable or NAME = scalar-default-char-variable or ACCESS = scalar-default-char-variable or SEQUENTIAL = scalar-default-char-variable or DIRECT = scalar-default-char-variable or STREAM = scalar-default-char-variable or FORM = scalar-default-char-variable or FORMATTED = scalar-default-char-variable or UNFORMATTED = scalar-default-char-variable or RECL = scalar-default-int-variable or NEXTREC = scalar-default-int-variable or POS = scalar-default-int-variable or SIZE = scalar-default-int-variable or BLANK = scalar-default-char-variable or POSITION = scalar-default-char-variable or ACTION = scalar-default-char-variable or READ = scalar-default-char-variable or WRITE = scalar-default-char-variable or READWRITE = scalar-default-char-variable or DELIM = scalar-default-char-variable or PAD = scalar-default-char-variable or ID = scalar-default-int-variable or PENDING = scalar-default-logical-variable or ASYNCHRONOUS = scalar-default-char-variable or ROUND = scalar-default-char-variable or DECIMAL = scalar-default-char-variable R1001 format-stmt is FORMAT format-specification R1002 format-specification is ( [ format-item-list ] ) R1003 format-item is [ r ] data-edit-desc or control-edit-desc or char-string-edit-desc or [ r ] ( format-item-list ) R1004 r is int-literal-constant R1005 data-edit-desc is I w [ . m ] or B w [ . m ] or O w [ . m ] or Z w [ . m ] or F w . d or E w . d [ E e ] or EN w . d [ E e ] or ES w . d [ E e ] or G w . d [ E e ] or L w or A [ w ] or D w . d or DT [ char-literal-constant ] [ ( v-list ) ] R1006 w is int-literal-constant R1007 m is int-literal-constant R1008 d is int-literal-constant R1009 e is int-literal-constant R1010 v is signed-int-literal-constant R1011 control-edit-desc is position-edit-desc or [ r ] / or : or sign-edit-desc or k P or blank-interp-edit-desc or round-edit-desc or decimal-edit-desc R1012 k is signed-int-literal-constant R1013 position-edit-desc is T n or TL n or TR n or n X R1014 n is int-literal-constant R1015 sign-edit-desc is S or SP or SS R1016 blank-interp-edit-desc is BN or BZ R1017 round-edit-desc is RU or RD or RZ or RN or RC or RP R1018 decimal-edit-desc is DC or DP R1019 char-string-edit-desc is char-literal-constant R1101 main-program is [ program-stmt ] [ specification-part ] [ execution-part ] [ internal-subprogram-part ] end-program-stmt R1102 program-stmt is PROGRAM program-name [ ( program-arg-list ) ] R1103 program-arg is program-arg-name R1104 end-program-stmt is END [ PROGRAM [ program-name ] ] R1105 module is module-stmt [ specification-part ] [ module-subprogram-part ] end-module-stmt R1106 module-stmt is MODULE module-name R1107 end-module-stmt is END [ MODULE [ module-name ] ] R1108 use-stmt is USE [ [ , module-nature ] :: ] module-name [ , rename-list ] or USE [ [ , module-nature ] :: ] module-name , & & ONLY : [ only-list ] R1109 module-nature is INTRINSIC or NON_INTRINSIC R1110 rename is local-name => use-name or OPERATOR (local-defined-operator) => & & OPERATOR (use-defined-operator) R1111 only is generic-spec or only-use-name or rename R1112 only-use-name is use-name R1113 block-data is block-data-stmt [ specification-part ] end-block-data-stmt R1114 block-data-stmt is BLOCK DATA [ block-data-name ] R1115 end-block-data-stmt is END [ BLOCK DATA [ block-data-name ] ] R1201 interface-block is interface-stmt [ interface-specification ] ... end-interface-stmt R1202 interface-specification is interface-body or procedure-stmt R1203 interface-stmt is INTERFACE [ generic-spec ] or INTERFACE PROCEDURE () R1204 end-interface-stmt is END INTERFACE [ generic-spec ] R1205 interface-body is function-stmt [ specification-part ] end-function-stmt or subroutine-stmt [ specification-part ] end-subroutine-stmt R1206 procedure-stmt is [ MODULE ] PROCEDURE procedure-name-list R1207 generic-spec is generic-name or OPERATOR ( defined-operator ) or ASSIGNMENT ( = ) or READ (FORMATTED) or READ (UNFORMATTED) or WRITE (FORMATTED) or WRITE (UNFORMATTED) R1208 import-stmt is IMPORT [ :: ] import-name-list R1209 external-stmt is EXTERNAL [ :: ] external-name-list R1210 procedure-declaration-stmt is PROCEDURE ( [ proc-interface ] ) [ [ , proc-attr-spec ] ... :: ] & & proc-decl-list R1211 proc-interface is abstract-interface-name or declaration-type-spec R1212 proc-attr-spec is access-spec or INTENT ( intent-spec ) or POINTER or SAVE or OPTIONAL or language-binding-spec R1213 proc-decl is proc-entity-name [ => NULL() ] R1214 intrinsic-stmt is INTRINSIC [ :: ] intrinsic-procedure-name-list R1215 function-reference is function-name ( [ actual-arg-spec-list ] ) or variable ( [ actual-arg-spec-list ] ) or data-ref % binding-name ( [ actual-arg-spec-list ] ) R1216 call-stmt is CALL subroutine-name [ ( [ actual-arg-spec-list ] ) ] or CALL variable [ ( [ actual-arg-spec-list ] ) or CALL data-ref % binding-name ( [ actual-arg-spec-list ] ) R1217 actual-arg-spec is [ keyword = ] actual-arg R1218 keyword is dummy-arg-name R1219 actual-arg is expr or variable or procedure-name or alt-return-spec R1220 alt-return-spec is * label R1221 function-subprogram is function-stmt [ specification-part ] [ execution-part ] [ internal-subprogram-part ] end-function-stmt R1222 function-stmt is [ prefix ] FUNCTION function-name & & ( [ dummy-arg-name-list ] ) & & [, proc-language-binding-spec] [ RESULT ( result-name ) ] R1223 proc-language-binding-spec is language-binding-spec R1224 prefix is prefix-spec [ prefix-spec ] ... R1225 prefix-spec is declaration-type-spec or RECURSIVE or PURE or ELEMENTAL R1226 end-function-stmt is END [ FUNCTION [ function-name ] ] R1227 subroutine-subprogram is subroutine-stmt [ specification-part ] [ execution-part ] [ internal-subprogram-part ] end-subroutine-stmt R1228 subroutine-stmt is [ prefix ] SUBROUTINE subroutine-name & & [ ( [ dummy-arg-list ] ) ] [, proc-language-binding-spec ] R1229 dummy-arg is dummy-arg-name or * R1230 end-subroutine-stmt is END [ SUBROUTINE [ subroutine-name ] ] R1231 entry-stmt is ENTRY entry-name [ ( [ dummy-arg-list ] ) & &[, proc-language-binding-spec ] [ RESULT ( result-name ) ] ] R1232 return-stmt is RETURN [ scalar-int-expr ] R1233 contains-stmt is CONTAINS R1234 stmt-function-stmt is function-name ( [ dummy-arg-name-list ] ) = scalar-expr