J3/00-295r1 Meeting 154 Date: October 2, 2000 To: J3 From: Kurt W. Hirchert Subject: BNF Analysis Part A Like many other programmers, I couldn't resist enhancing the BNF extraction and analysis script that I wrote during meeting 154. In addition to better commenting it and improving the appearance of some of its output, I added a whole new section to recognize problems like rules that are not defined in the section matching rule number and rules that are not consistently defined in different sections. I have the divided the electronic representation of this document into three files: Part A is this message. Part B contains the extracted BNF, without constraints or duplicate occurrences of rules. (This was produced by invoking the script with option -1.) Part C is the cross-reference of the BNF non-terminal symbols. (This was produced by invoking the script with option -10.) It now handles the implicit BNF rules somewhat better. Symbols of the form XXXX-name are now treated as defined by the rule for name. References to symbols of the form scalar-XXXX or XXXX-list are now displayed as part of the references to the underlying symbol XXXX. I have given the script itself to Richard for inclusion in the scripts directory of the 007 distribution. If there is enough demand, I will work with Richard to adapt this script to read MIF and generate MIF so the output could be included in 007, but my initial look at the MIF suggests it is sufficiently ugly that I am unlikely to switch scanning it unless there is such demand. Part B 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 Part C abstract-interface-name (R304) R1211 ac-do-variable (R462) R461 ac-implied-do (R460) R459 ac-implied-do-control (R461) R460 ac-value (R459) *-list:R458,R460 access-id (R525) *-list:R524 access-spec (R511) R424,R431,R436,R441,R504,R524,R1212 access-stmt (R524) R214 action-stmt (R216) R215,R807,R838,R842 action-term-do-construct (R836) R835 actual-arg (R1219) R1217 actual-arg-spec (R1217) *-list:R1215,R1216 add-op (R709) R310,R706 add-operand (R705) R705,R706 alloc-opt (R624) *-list:R623,R635 allocatable-stmt (R529) R214 allocate-lower-bound (R630) R629 allocate-object (R628) R627,*-list:R635 allocate-shape-spec (R629) *-list:R627 allocate-stmt (R623) R216 allocate-upper-bound (R631) R629 allocation (R627) *-list:R623 alphanumeric-character (R302) R301,R304 alt-return-spec (R1220) R1219 and-op (R719) R310,R715 and-operand (R714) R715 arithmetic-if-stmt (R847) R216 array-constructor (R458) R701 array-element (R616) R543,R555,R602,R610 array-name (R304) R528 array-section (R617) R602 array-spec (R513) R504,R505,R528,R531 assignment-stmt (R734) R216,R742,R752 associate-construct (R821) R215 associate-construct-name (R304) R822,R824 associate-name (R304) R817,R823 associate-stmt (R822) R821 association (R823) *-list:R822 assumed-shape-spec (R517) *-list:R513 assumed-size-spec (R519) R513 asynchronous-stmt (R534) R214 attr-spec (R504) R501 backspace-stmt (R922) R216 binary-constant (R408) R407 bind-entity (R538) *-list:R537 bind-spec (R521) *-list:R520 bind-stmt (R537) R214 binding (R442) R440 binding-attr (R441) *-list:R440 binding-name (R304) R440,R1215,R1216 binding-private-stmt (R438) R437 blank-interp-edit-desc (R1016) R1011 block (R801) R802,R808,R816,R821,R832 block-data (R1113) R202 block-data-name (R304) R1114,R1115 block-data-stmt (R1114) R1113 block-do-construct (R826) R825 bounds-spec (R736) *-list:R735 boz-literal-constant (R407) R306 call-stmt (R1216) R216 case-construct (R808) R215 case-construct-name (R304) R809,R810,R811 case-expr (R812) R809 case-selector (R813) R810 case-stmt (R810) R443,R808 case-value (R815) R814 case-value-range (R814) *-list:R813 char-constant (R309) scalar-*:R850 char-expr (R725) R731,scalar-*:R812 char-initialization-expr (R731) scalar-*:R521,R815 char-length (R510) R432,R505,R509 char-literal-constant (R420) R306,R1005,R1019 char-selector (R508) R503 char-string-edit-desc (R1019) R1003 char-variable (R605) character (R301) close-spec (R909) *-list:R908 close-stmt (R908) R216 common-block-name (R304) R527,R538,R556 common-block-object (R557) *-list:R556 common-stmt (R556) R214 complex-literal-constant (R417) R306 component-array-spec (R433) R431,R432 component-attr-spec (R431) *-list:R430 component-decl (R432) *-list:R430 component-def-stmt (R429) R427 component-initialization (R434) R432 component-name (R304) R432 component-spec (R450) *-list:R449 computed-goto-stmt (R846) R216 concat-op (R711) R310,R710 connect-spec (R905) *-list:R904 constant (R305) R308,R309,R701,scalar-*:R547,R610 constant-subobject () scalar-*:R547 contains-stmt (R1233) R210,R212,R437 continue-stmt (R848) R216,R833 control-edit-desc (R1011) R1003 cycle-stmt (R843) R216 d (R1008) R1005 data-component-def-stmt (R430) R429 data-component-part (R427) R422 data-edit-desc (R1005) R1003 data-i-do-object (R543) *-list:R542 data-i-do-variable (R544) R542 data-implied-do (R542) R541,R543 data-ref (R612) R614,R616,R617,R1215,R1216 data-stmt (R539) R209,R214 data-stmt-constant (R547) R545 data-stmt-object (R541) *-list:R540 data-stmt-repeat (R546) R545 data-stmt-set (R540) R539 data-stmt-value (R545) *-list:R540 deallocate-stmt (R635) R216 decimal-edit-desc (R1018) R1011 declaration-construct (R207) R204 declaration-type-spec (R502) R430,R452,R501,R549,R1211,R1225 default-char-expr (R726) R914,scalar-*:R905,R906,R909,R913 default-char-initialization-expr () scalar-*:R913 default-char-variable (R606) R903,scalar-*:R626,R907,R927 default-int-variable (R608) scalar-*:R905,R909,R913,R921,R925,R926, R927 default-logical-variable (R604) scalar-*:R927 deferred-shape-spec (R518) *-list:R433,R513,R529,R530 defined-binary-op (R723) R311,R722 defined-operator (R311) R1207 defined-unary-op (R703) R311,R702 derived-type-def (R422) R207 derived-type-spec (R447) R449,R502,R503 derived-type-stmt (R423) R422 designator (R602) R601,R615,R701 digit () R302,R313,R402,R408,R409,R411,R850 digit-string (R402) R401,R404,R405,R413,R414 dimension-stmt (R528) R214 do-block (R832) R826 do-body (R837) R836,R839,R841 do-construct (R825) R215 do-construct-name (R304) R828,R829,R834,R843,R844 do-stmt (R827) R826 do-term-action-stmt (R838) R836 do-term-shared-stmt (R842) R841 do-variable (R831) R830,R919 dummy-arg (R1229) *-list:R1228,R1231 dummy-arg-name (R304) R1218,R1229,*-list:R522,R523,R536,R1222, R1234 e (R1009) R1005 else-if-stmt (R804) R802 else-stmt (R805) R802 elsewhere-stmt (R745) R739 end-associate-stmt (R824) R821 end-block-data-stmt (R1115) R1113 end-do (R833) R826 end-do-stmt (R834) R833 end-enum-stmt (R457) R453 end-forall-stmt (R753) R747 end-function-stmt (R1226) R216,R1205,R1221 end-if-stmt (R806) R802 end-interface-stmt (R1204) R1201 end-module-stmt (R1107) R1105 end-program-stmt (R1104) R216,R1101 end-select-kind-stmt (R445) R443 end-select-stmt (R811) R808 end-select-type-stmt (R820) R816 end-subroutine-stmt (R1230) R216,R1205,R1227 end-type-stmt (R446) R422 end-where-stmt (R746) R739 endfile-stmt (R923) R216 entity-decl (R505) *-list:R501 entry-name (R304) R1231 entry-stmt (R1231) R206,R207,R209 enum-alias-def (R453) R207 enum-def-stmt (R454) R453 enumerator (R456) *-list:R455 enumerator-def-stmt (R455) R453 equiv-op (R721) R310,R717 equiv-operand (R716) R716,R717 equivalence-object (R555) R554,*-list:R554 equivalence-set (R554) *-list:R553 equivalence-stmt (R553) R214 errmsg-variable (R626) R624 executable-construct (R215) R208,R209 execution-part (R208) R1101,R1221,R1227 execution-part-construct (R209) R208,R801,R837 exit-stmt (R844) R216 explicit-shape-spec (R514) *-list:R433,R513,R519,R557 exponent (R416) R413 exponent-letter (R415) R413 expr (R722) R450,R459,R701,R722,R724,R725,R726,R727, R728,R730,R734,R737,R818,R916,R1219, scalar-*:R1234 extended-intrinsic-op (R312) R311 extensible-type-name (R304) R819 external-file-unit (R902) R901,R905,R909,R921,R922,R923,R924,R925, R927 external-name (R304) *-list:R1209 external-stmt (R1209) R214 external-subprogram (R203) R202 file-name-expr (R906) R905,R927 forall-assignment-stmt (R752) R751,R754 forall-body-construct (R751) R747 forall-construct (R747) R215,R751 forall-construct-name (R304) R748,R753 forall-construct-stmt (R748) R747 forall-header (R749) R748,R754 forall-stmt (R754) R216,R751 forall-triplet-spec (R750) *-list:R749 format (R914) R910,R912,R913 format-item (R1003) *-list:R1002,R1003 format-specification (R1002) R1001 format-stmt (R1001) R206,R207,R209 function-name (R304) R505,R1215,R1222,R1226,R1234 function-reference (R1215) R701 function-stmt (R1222) R1205,R1221 function-subprogram (R1221) R203,R211,R213 generic-name (R304) R1207 generic-spec (R1207) R525,R1111,R1203,R1204 goto-stmt (R845) R216 hex-constant (R410) R407 hex-digit (R411) R410 if-construct (R802) R215 if-construct-name (R304) R803,R804,R805,R806 if-stmt (R807) R216 if-then-stmt (R803) R802 imag-part (R419) R417 implicit-part (R205) R204 implicit-part-stmt (R206) R205 implicit-spec (R549) *-list:R548 implicit-stmt (R548) R205,R206 import-name (R304) *-list:R1208 import-stmt (R1208) R204 index-name (R304) R750 initialization (R506) R505 initialization-expr (R730) R434,R506,R533,scalar-*:R444 inner-shared-do-construct (R841) R840 input-item (R915) R918,*-list:R910 inquire-spec (R927) *-list:R926 inquire-stmt (R926) R216 int-constant (R308) scalar-*:R546 int-constant-name (R304) scalar-*:R405 int-constant-subobject () scalar-*:R546 int-expr (R727) R622,R732,scalar-*:R314,R461,R542,R611, R618,R621,R630,R631,R729,R812,R830,R846, R902,R905,R913,R919,R1232 int-initialization-expr (R732) scalar-*:R456,R507,R508,R815 int-literal-constant (R404) R306,R403,R1004,R1006,R1007,R1008,R1009, R1014,scalar-*:R510 int-variable (R607) scalar-*:R462,R544,R625,R831 intent-spec (R512) R504,R522,R1212 intent-stmt (R522) R214 interface-block (R1201) R207 interface-body (R1205) R1202 interface-specification (R1202) R1201 interface-stmt (R1203) R1201 internal-file-unit (R903) R901 internal-subprogram (R211) R210 internal-subprogram-part (R210) R1101,R1221,R1227 intrinsic-operator (R310) R312 intrinsic-procedure-name (R304) *-list:R1214 intrinsic-stmt (R1214) R214 io-control-spec (R913) *-list:R910,R911 io-implied-do (R917) R915,R916 io-implied-do-control (R919) R917 io-implied-do-object (R918) *-list:R917 io-unit (R901) R913 iomsg-variable (R907) R905,R909,R913,R921,R925,R927 k (R1012) R1011 keyword (R1218) R448,R450,R1217 kind-param (R405) R404,R413,R420,R421 kind-selector (R507) R425,R454,R503 label (R313) R828,R845,R847,R905,R909,R913,R914,R921, R925,R927,R1220,*-list:R846 label-do-stmt (R828) R827,R836,R839,R841 language-binding-spec (R520) R504,R537,R1212,R1223 length-selector (R509) R508 letter () R302,R304,R550,R703,R723 letter-spec (R550) *-list:R549 level-1-expr (R702) R704 level-2-expr (R706) R706,R710 level-3-expr (R710) R710,R712 level-4-expr (R712) R714 level-5-expr (R717) R717,R722 literal-constant (R306) R305 local-defined-operator () R1110 local-name (R304) R1110 logical-expr (R724) R733,R743,scalar-*:R803,R804,R807,R812, R830 logical-initialization-expr (R733) scalar-*:R815 logical-literal-constant (R421) R306 logical-variable (R603) loop-control (R830) R828,R829 lower-bound (R515) R514,R517,R519,R736 m (R1007) R1005 main-program (R1101) R202 mask-expr (R743) R738,R740,R744,scalar-*:R749 masked-elsewhere-stmt (R744) R739 module (R1105) R202 module-name (R304) R1106,R1107,R1108 module-nature (R1109) R1108 module-stmt (R1106) R1105 module-subprogram (R213) R212 module-subprogram-part (R212) R1105 mult-op (R708) R310,R705 mult-operand (R704) R704,R705 n (R1014) R1013 name (R304) R307 named-constant (R307) R305,R418,R419,R456,R533 named-constant-def (R533) *-list:R532 namelist-group-name (R304) R551,R913 namelist-group-object (R552) *-list:R551 namelist-stmt (R551) R214 nonblock-do-construct (R835) R825 nonlabel-do-stmt (R829) R827 not-op (R718) R310,R714 nullify-stmt (R633) R216 numeric-expr (R728) scalar-*:R847 object-name (R304) R505,R527,R529,R530,R531,R538,R602, *-list:R534,R535 octal-constant (R409) R407 only (R1111) *-list:R1108 only-use-name (R1112) R1111 open-stmt (R904) R216 optional-stmt (R523) R214 or-op (R720) R310,R716 or-operand (R715) R715,R716 outer-shared-do-construct (R839) R835,R840 output-item (R916) R918,*-list:R911,R912,R926 parameter-stmt (R532) R206,R207 parent-string (R610) R609 parent-type-name (R304) R424 part-name (R304) R613 part-ref (R613) R612 pointer-assignment-stmt (R735) R216,R752 pointer-object (R634) R735,*-list:R633 pointer-stmt (R530) R214 position-edit-desc (R1013) R1011 position-spec (R925) *-list:R922,R923,R924 power-op (R707) R310,R704 prefix (R1224) R1222,R1228 prefix-spec (R1225) R1224 primary (R701) R702 print-stmt (R912) R216 private-sequence-stmt (R428) R427 proc-attr-spec (R1212) R1210 proc-binding (R440) R439 proc-binding-construct (R439) R437,R443 proc-component-attr-spec (R436) *-list:R435 proc-component-def-stmt (R435) R429 proc-decl (R1213) *-list:R435,R1210 proc-entity-name (R304) R1213 proc-interface (R1211) R435,R1210 proc-interface-name (R304) R440 proc-language-binding-spec (R1223) R1222,R1228,R1231 procedure-declaration-stmt (R1210) R207 procedure-name (R304) R442,R737,R1219,*-list:R1206 procedure-stmt (R1206) R1202 program (R201) program-arg (R1103) *-list:R1102 program-arg-name (R304) R1103 program-name (R304) R1102,R1104 program-stmt (R1102) R1101 program-unit (R202) R201 r (R1004) R1003,R1011 read-stmt (R910) R216 real-literal-constant (R413) R306,R412 real-part (R418) R417 rel-op (R713) R310,R712 rename (R1110) R1111,*-list:R1108 rep-char () R420 result-name (R304) R1222,R1231 return-stmt (R1232) R216 rewind-stmt (R924) R216 round-edit-desc (R1017) R1011 save-stmt (R526) R214 saved-entity (R527) *-list:R526 section-subscript (R619) *-list:R613 select-case-stmt (R809) R808 select-construct-name (R304) R817,R819,R820 select-kind-construct (R443) R439 select-kind-stmt (R444) R443 select-type-construct (R816) R215 select-type-stmt (R817) R816 selector (R818) R817,R823 shared-term-do-construct (R840) R839 sign (R406) R401,R403,R412 sign-edit-desc (R1015) R1011 signed-digit-string (R401) R416 signed-int-literal-constant (R403) R418,R419,R547,R1010,R1012 signed-real-literal-constant (R412) R418,R419,R547 significand (R414) R413 source-variable (R632) R624 special-character () R301 specification-expr (R729) R515,R516 specification-part (R204) R1101,R1105,R1113,R1205,R1221,R1227 specification-stmt (R214) R207 stat-variable (R625) R624 stmt-function-stmt (R1234) R207 stop-code (R850) R849 stop-stmt (R849) R216 stride (R603,R621) R620,R750 structure-component (R614) R602,R628,R634,scalar-*:R543,R610 structure-constructor (R449) R547,R701 subroutine-name (R304) R1216,R1228,R1230 subroutine-stmt (R1228) R1205,R1227 subroutine-subprogram (R1227) R203,R211,R213 subscript (R618) R619,R620,R750 subscript-triplet (R620) R619 substring (R609) R555,R602 substring-range (R611) R609,R617 target (R737) R735 target-stmt (R531) R214 type-alias (R452) *-list:R451 type-alias-name (R304) R447,R452,R454,R457,R503 type-alias-stmt (R451) R207 type-attr-spec (R424) *-list:R423 type-bound-procedure-part (R437) R422 type-declaration-stmt (R501) R207 type-guard-stmt (R819) R816 type-name (R304) R423,R446,R447 type-param-attr-spec (R426) R425 type-param-def-stmt (R425) R422 type-param-inquiry (R615) R701 type-param-name (R304) R615,*-list:R423,R425 type-param-spec (R448) *-list:R447 type-param-value (R314) R448,R508,R509,R510 type-spec (R503) R458,R502,R623 underscore (R303) R302 upper-bound (R516) R514 use-defined-operator () R1110 use-name (R304) R525,R1110,R1112 use-stmt (R1108) R204 v (R1010) *-list:R1005 value-stmt (R536) R214 variable (R601) R541,R603,R604,R605,R606,R607,R608,R632, R734,R737,R818,R915,R1215,R1216,R1219 variable-name (R304) R552,R555,R557,R628,R634,scalar-*:R610 vector-subscript (R622) R619 volatile-stmt (R535) R214 w (R1006) R1005 wait-spec (R921) *-list:R920 wait-stmt (R920) where-assignment-stmt (R742) R738,R741 where-body-construct (R741) R739 where-construct (R739) R215,R741,R751 where-construct-name (R304) R740,R744,R745,R746 where-construct-stmt (R740) R739 where-stmt (R738) R216,R741,R751 write-stmt (R911) R216