%%%%%%%%%% %% Fortran ISO/IEC 1539:1991 section R6xx Use of Data Objects %%%%%%%%%% module languages/fortran/syntax/R600UseDataObjects imports languages/fortran/syntax/FortranLex languages/fortran/syntax/R700Expressions exports sorts AllocatedShape AllocateObject AllocateObjectList AllocateShapeSpec AllocateStmt Allocation AllocationList ArrayElement DataRef DeallocateStmt FieldSelector NullifyStmt PointerField PointerObject PointerObjectList ScalarVariable SectionSubscript SectionSubscriptList StructureComponent Subscript SubscriptTriplet SubstringRange Variable context-free syntax %%R601 VariableName | ArrayElement -> ScalarVariable VariableName -> Variable VariableName '(' {Subscript ","}+ ')' -> Variable VariableName SubstringRange -> Variable VariableName '(' {Subscript ","}+ ')' SubstringRange -> Variable Expr -> Subscript %%R612 Name '%' Name -> DataRef DataRef '%' Name -> DataRef Name '(' SectionSubscriptList ')' -> DataRef DataRef '(' SectionSubscriptList ')' -> DataRef {SectionSubscript ","}+ -> SectionSubscriptList Expr -> SectionSubscript SubscriptTriplet -> SectionSubscript %%R609 %%R610 %%R611 '(' SubscriptTriplet ')' -> SubstringRange %%R614 VariableName FieldSelector -> StructureComponent StructureComponent FieldSelector -> StructureComponent '(' SectionSubscriptList ')' '%' Name -> FieldSelector '%' Name -> FieldSelector %%R615 StructureComponent '(' SectionSubscriptList ')' -> ArrayElement VariableName '(' SectionSubscriptList ')' -> ArrayElement %%R619 Expr? ':' Expr? (':' Expr)? -> SubscriptTriplet %%R622 LblDef 'allocate' '(' AllocationList ',' 'stat' '=' Variable ')' EOS -> AllocateStmt LblDef 'allocate' '(' AllocationList ')' EOS -> AllocateStmt %%R623 chain rule deleted %%R624 {Allocation ","}+ -> AllocationList AllocateObject AllocatedShape? -> Allocation '(' SectionSubscriptList ')' -> AllocatedShape %%/* From ELI: Need to use SectionSubscriptList here to solve an LALR(1) conflict with the %% * FieldSelector in R625. (Can't tell which we have until the character %% * following the right paren, but we must reduce WITHIN the parens.) %% */ %%R625 {AllocateObject ","}+ -> AllocateObjectList VariableName -> AllocateObject AllocateObject FieldSelector -> AllocateObject %%R626 %% JD is this correct??/* Omitted to solve LALR(1) conflict. see R624 {Expr ":" }+ -> AllocateShapeSpec %%R629 LblDef 'nullify' '(' PointerObjectList ')' EOS -> NullifyStmt {PointerObject ","}+ -> PointerObjectList %%R630 Name -> PointerObject PointerField -> PointerObject Name '(' SFExprList ')' '%' Name -> PointerField Name '(' SFDummyArgNameList ')' '%' Name -> PointerField Name '%' Name -> PointerField PointerField FieldSelector -> PointerField %%R631 LblDef 'deallocate' '(' AllocateObjectList ',' 'stat' '=' Variable ')' EOS -> DeallocateStmt LblDef 'deallocate' '(' AllocateObjectList ')' EOS -> DeallocateStmt