BNF for F90.jj
NON-TERMINALS
Program
::=
(
Cmnt
)?
ProgramUnit
(
ProgramUnit
)* <EOF>
|
<EOF>
ProgramUnit
::=
(
ExternalSubprogram
|
Module
|
BlockData
|
MainProgram
)
ExternalSubprogram
::=
(
FunctionSubprogram
|
SubroutineSubprogram
)
SpecificationPart
::=
(
UseStmt
Cmnt
)*
ImplicitPart
(
DeclarationConstruct
)*
ImplicitPart
::=
(
ImplicitPartStmt
Cmnt
)*
ImplicitPartStmt
::=
(
ImplicitStmt
|
ParameterStmt
|
FormatStmt
|
EntryStmt
)
DeclarationConstruct
::=
(
DerivedTypeDef
|
InterfaceBlock
|
TypeDeclarationStmt
Cmnt
|
SpecificationStmt
Cmnt
|
ParameterStmt
Cmnt
|
FormatStmt
Cmnt
|
EntryStmt
Cmnt
|
StmtFunctionStmt
)
ExecutionPart
::=
ExecutableConstruct
Cmnt
(
ExecutionPartConstruct
Cmnt
)*
OptLabel
::=
(
NewLabel
)?
ExecutionPartConstruct
::=
ExecutableConstruct
|
FormatStmt
|
EntryStmt
|
DataStmt
InternalSubprogramPart
::=
(
ContainsStmt
Cmnt
(
InternalSubprogram
)+ )?
InternalSubprogram
::=
(
FunctionSubprogram
|
SubroutineSubprogram
)
ModuleSubprogramPart
::=
(
ContainsStmt
Cmnt
ModuleSubprogram
(
ModuleSubprogram
)* )?
ModuleSubprogram
::=
(
FunctionSubprogram
|
SubroutineSubprogram
)
SpecificationStmt
::=
AccessStmt
|
AllocatableStmt
|
CommonStmt
|
DataStmt
|
DimensionStmt
|
EquivalenceStmt
|
ExternalStmt
|
IntentStmt
|
IntrinsicStmt
|
NamelistStmt
|
OptionalStmt
|
PointerStmt
|
SaveStmt
|
TargetStmt
ExecutableConstruct
::=
( (
IfConstruct
|
ActionStmt
) |
CaseConstruct
|
DoConstruct
| (
ForallConstruct
|
ActionStmt
) | (
WhereConstruct
|
ActionStmt
) |
ActionStmt
)
ActionStmt
::=
(
AllocateStmt
|
PointerAssignmentStmt
|
AssignmentStmt
|
BackspaceStmt
|
CallStmt
|
CloseStmt
|
ContinueStmt
|
CycleStmt
|
DeallocateStmt
|
EndfileStmt
|
ExitStmt
|
ForallStmt
|
InquireStmt
|
NullifyStmt
|
OpenStmt
|
PrintStmt
|
ReadStmt
|
ReturnStmt
|
RewindStmt
|
StopStmt
|
WhereStmt
|
WriteStmt
|
ArithmeticIfStmt
|
IfStmt
|
ComputedGotoStmt
|
GotoStmt
)
ScalarConstant
::=
Constant
Constant
::=
(
Name
|
LiteralConstant
|
ComplexLiteralConstant
)
LiteralConstant
::=
(
CharLiteralConstant
|
IntLiteralConstant
|
RealLiteralConstant
|
LogicalLiteralConstant
|
BozLiteralConstant
)
IntConstant
::=
Constant
ScalarIntConstant
::=
IntConstant
CharConstant
::=
Constant
ScalarCharConstant
::=
CharConstant
IntrinsicOperator
::=
(
PowerOp
|
MultOp
|
AddOp
|
ConcatOp
|
RelOp
|
NotOp
|
AndOp
|
OrOp
|
EquivOp
)
DefinedOperator
::=
<DEFINED_OPERATOR>
DigitString
::=
<DIGIT_STRING>
SignedIntLiteralConstant
::=
<PLUS>
IntLiteralConstant
|
<MINUS>
IntLiteralConstant
|
IntLiteralConstant
ScalarIntLiteralConstant
::=
IntLiteralConstant
IntLiteralConstant
::=
<INTEGER_CONST>
BozLiteralConstant
::=
( <BINARY_CONST> | <OCTAL_CONST> | <HEX_CONST> )
SignedRealLiteralConstant
::=
<PLUS>
RealLiteralConstant
|
<MINUS>
RealLiteralConstant
|
RealLiteralConstant
LexemeIsDouble
::=
java code
RealLiteralConstant
::=
RealConstant
RealConstant
::=
<REAL_LITERAL_CONST>
ComplexLiteralConstant
::=
<LBRACKET>
RealPart
<COMMA>
ImagPart
<RBRACKET>
RealPart
::=
(
SignedRealLiteralConstant
|
SignedIntLiteralConstant
)
ImagPart
::=
(
SignedRealLiteralConstant
|
SignedIntLiteralConstant
)
createComplexConstant
::=
java code
CharLiteralConstant
::=
<STRING>
LogicalLiteralConstant
::=
( <TRUEL> | <FALSEL> )
DerivedTypeDef
::=
DerivedTypeStmt
Cmnt
(
PrivateSequenceStmt
Cmnt
)* (
ComponentDefStmt
Cmnt
)+
EndTypeStmt
Cmnt
DerivedTypeStmt
::=
<TYPE> ( ( <COMMA>
AccessSpec
)? <DOUBLECOLON> )?
Name
PrivateSequenceStmt
::=
<PRIVATE>
|
SequenceStmt
SequenceStmt
::=
<SEQUENCE>
ComponentDefStmt
::=
TypeSpec
( <COMMA>
ComponentAttrSpecList
<DOUBLECOLON>
ComponentDeclList
| <DOUBLECOLON>
ComponentDeclList
|
ComponentDeclList
)
ComponentAttrSpecList
::=
ComponentAttrSpec
( <COMMA>
ComponentAttrSpec
)*
ComponentDeclList
::=
ComponentDecl
( <COMMA>
ComponentDecl
)*
ComponentAttrSpec
::=
<POINTER>
|
<DIMENSION> <LBRACKET>
ComponentArraySpec
<RBRACKET>
ComponentArraySpec
::=
ExplicitShapeSpecList
|
DeferredShapeSpecList
DeferredShapeSpecList
::=
DeferredShapeSpec
( <COMMA>
DeferredShapeSpec
)*
ComponentDecl
::=
Name
( <LBRACKET>
ComponentArraySpec
<RBRACKET> )? ( <MULTIPLY>
CharLength
)? (
ComponentInitialization
)?
ComponentInitialization
::=
<EQUAL>
InitializationExpr
|
<EQGT>
Name
<LBRACKET> <RBRACKET>
EndTypeStmt
::=
<ENDTYPE> (
Name
)?
StructureConstructor
::=
Name
<LBRACKET>
ExprList
<RBRACKET>
ExprList
::=
Expr
( <COMMA>
Expr
)*
ArrayConstructor
::=
<ACVALUE1>
AcValueList
<ACVALUE2>
AcValueList
::=
AcValue
RestAcValueList
RestAcValueList
::=
|
|
<COMMA>
AcValue
RestAcValueList
AcValue
::=
AcImpliedDo
|
Expr
AcImpliedDo
::=
<LBRACKET>
AcValueList
<COMMA>
AcImpliedDoControl
<RBRACKET>
AcImpliedDoControl
::=
AcDoVariable
<EQUAL>
ScalarIntExpr
<COMMA>
ScalarIntExpr
( <COMMA>
ScalarIntExpr
)?
AcDoVariable
::=
ScalarIntVariable
TypeDeclarationStmt
::=
TypeSpec
( ( <COMMA>
AttrSpecs
)? <DOUBLECOLON> )?
EntityDeclList
convertAttrIfNeeded
::=
java code
AttrSpecs
::=
AttrSpec
( <COMMA>
AttrSpec
)*
TypeSpec
::=
<INTEGER> (
KindSelector
| )
|
<REAL> (
KindSelector
| )
|
<DOUBLEPRECISION>
|
<COMPLEX> (
KindSelector
| )
|
<CHARACTER> (
CharSelector
| )
|
<LOGICAL> (
KindSelector
| )
|
<TYPE> <LBRACKET>
Name
<RBRACKET>
EntityDeclList
::=
EntityDecl
( <COMMA>
EntityDecl
)*
AttrSpec
::=
( <PARAMETER> |
AccessSpec
| <ALLOCATABLE> | <DIMENSION> <LBRACKET>
ArraySpec
<RBRACKET> | <EXTERNAL> | <INTENT> <LBRACKET>
IntentSpec
<RBRACKET> | <INTRINSIC> | <OPTIONAL> | <POINTER> | <SAVE> | <TARGET> )
EntityDecl
::=
Name
( <LBRACKET>
ArraySpec
<RBRACKET> ( <MULTIPLY>
CharLength
)? (
Initialization
)? | ( <MULTIPLY>
CharLength
)?
Initialization
| )
Initialization
::=
<EQUAL>
InitializationExpr
|
<EQGT>
Name
<LBRACKET> <RBRACKET>
KindSelector
::=
<LBRACKET> ( <KINDEQ> )?
ScalarIntInitializationExpr
<RBRACKET>
CharSelector
::=
( <MULTIPLY>
CharLength
( <COMMA> )? | <LBRACKET> (
CharLenParamValue
( <COMMA> ( <KINDEQ>
ScalarIntInitializationExpr
<RBRACKET> |
ScalarIntInitializationExpr
<RBRACKET> ) | <RBRACKET> ) | <LENEQ>
CharLenParamValue
( <COMMA> <KINDEQ>
ScalarIntInitializationExpr
<RBRACKET> | <RBRACKET> ) | <KINDEQ>
ScalarIntInitializationExpr
( <COMMA> <LENEQ>
CharLenParamValue
<RBRACKET> | <RBRACKET> ) ) )
CharLength
::=
( <LBRACKET>
CharLenParamValue
<RBRACKET> |
ScalarIntLiteralConstant
)
CharLenParamValue
::=
SpecificationExpr
|
<MULTIPLY>
AccessSpec
::=
( <PUBLIC> | <PRIVATE> )
IntentSpec
::=
( <IN> | <OUT> | <INOUT> )
ArraySpec
::=
(
LowerBound
<COLON> <MULTIPLY> |
ExplicitShapeSpecList
( <COMMA> (
LowerBound
<COLON> <MULTIPLY> | <MULTIPLY> ) | ) |
DeferredShapeSpecList
|
AssumedShapeSpecList
| <MULTIPLY> )
ExplicitShapeSpecList
::=
ExplicitShapeSpec
( <COMMA>
ExplicitShapeSpec
)*
ExplicitShapeSpec
::=
SpecificationExpr
( <COLON>
UpperBound
| )
LowerBound
::=
SpecificationExpr
UpperBound
::=
SpecificationExpr
AssumedShapeSpecList
::=
AssumedShapeSpec
( <COMMA>
AssumedShapeSpec
)*
AssumedShapeSpec
::=
LowerBound
<COLON>
|
<COLON>
DeferredShapeSpec
::=
<COLON>
AssumedSizeSpec
::=
LowerBound
<COLON> <MULTIPLY>
|
ExplicitShapeSpecList
<COMMA> (
LowerBound
<COLON> <MULTIPLY> | <MULTIPLY> )
|
<MULTIPLY>
IntentStmt
::=
<INTENT> <LBRACKET>
IntentSpec
<RBRACKET>
OptDoubleColon
Name
( <COMMA>
Name
)*
OptionalStmt
::=
<OPTIONAL>
OptDoubleColon
Name
( <COMMA>
Name
)*
AccessStmt
::=
AccessSpec
(
OptDoubleColon
AccessIdList
| )
AccessIdList
::=
AccessId
( <COMMA>
AccessId
)*
AccessId
::=
(
Name
| <OPERATOR> <LBRACKET>
Operator
<RBRACKET> | <ASSIGNMENT> <LBRACKET> <EQUAL> <RBRACKET> )
SaveStmt
::=
<SAVE> (
OptDoubleColon
SavedEntityList
)?
SavedEntityList
::=
SavedEntity
( <COMMA>
SavedEntity
)*
SavedEntity
::=
Name
|
<DIVIDE>
Name
<DIVIDE>
DimensionStmt
::=
<DIMENSION>
OptDoubleColon
Name
Dims
( <COMMA>
Name
Dims
)*
AllocatableStmt
::=
<ALLOCATABLE>
OptDoubleColon
Name
( <LBRACKET>
DeferredShapeSpecList
<RBRACKET> )? ( <COMMA>
Name
( <LBRACKET>
DeferredShapeSpecList
<RBRACKET> )? )*
PointerStmt
::=
<POINTER>
OptDoubleColon
Name
( <LBRACKET>
DeferredShapeSpecList
<RBRACKET> )? ( <COMMA>
Name
( <LBRACKET>
DeferredShapeSpecList
<RBRACKET> )? )*
TargetStmt
::=
<TARGET>
OptDoubleColon
Name
(
Dims
)? ( <COMMA>
Name
(
Dims
)? )*
OptDoubleColon
::=
( <DOUBLECOLON> )?
Dims
::=
<LBRACKET>
ArraySpec
<RBRACKET>
ParameterStmt
::=
<PARAMETER> <LBRACKET>
NamedConstantDefList
<RBRACKET>
NamedConstantDefList
::=
NamedConstantDef
( <COMMA>
NamedConstantDef
)*
NamedConstantDef
::=
Name
<EQUAL>
InitializationExpr
DataStmt
::=
<DATA>
DataStmtList
DataStmtList
::=
DataStmtSet
( ( <COMMA> )?
DataStmtSet
)*
DataStmtSet
::=
DataStmtObjectList
<DIVIDE>
DataStmtValueList
<DIVIDE>
DataStmtObjectList
::=
DataStmtObject
( <COMMA>
DataStmtObject
)*
DataStmtObject
::=
Variable
|
DataImpliedDo
DataImpliedDo
::=
<LBRACKET>
DataIDoObjectList
<COMMA>
DataIDoVariable
<EQUAL>
ScalarIntExpr
<COMMA>
ScalarIntExpr
( <COMMA>
ScalarIntExpr
)? <RBRACKET>
DataIDoObjectList
::=
DataIDoObject
( <COMMA>
DataIDoObject
)*
DataIDoObject
::=
Variable
|
DataImpliedDo
DataIDoVariable
::=
ScalarIntVariable
DataStmtValueList
::=
DataStmtValue
( <COMMA>
DataStmtValue
)*
DataStmtValue
::=
(
DataStmtRepeat
<MULTIPLY> )?
DataStmtConstant
ScalarIntConstantSubobject
::=
ConstantSubobject
DataStmtRepeat
::=
ScalarIntConstantSubobject
|
ScalarIntConstant
DataStmtConstant
::=
( (
Name
<LBRACKET> <RBRACKET> |
StructureConstructor
|
ScalarConstantSubobject
) |
ScalarConstant
)
|
SignedRealLiteralConstant
|
SignedIntLiteralConstant
|
ScalarConstant
ImplicitStmt
::=
<IMPLICITNONE>
|
<IMPLICIT>
ImplicitSpec
( <COMMA>
ImplicitSpec
)*
ImplicitSpec
::=
TypeSpec
<LBRACKET>
LetterSpecList
<RBRACKET>
LetterSpecList
::=
LetterSpec
( <COMMA>
LetterSpec
)*
LetterSpec
::=
Letter
( <MINUS>
Letter
)?
Letter
::=
<LETTER>
NamelistStmt
::=
<NAMELIST> <DIVIDE>
NamelistGroupName
<DIVIDE>
NamelistGroupObjectList
( ( <COMMA> )? <DIVIDE>
NamelistGroupName
<DIVIDE>
NamelistGroupObjectList
)*
NamelistGroupObjectList
::=
NamelistGroupObject
( <COMMA>
NamelistGroupObject
)*
NamelistGroupName
::=
Name
NamelistGroupObject
::=
Name
EquivalenceStmt
::=
<EQUIVALENCE>
EquivalenceSetList
EquivalenceSetList
::=
EquivalenceSet
( <COMMA>
EquivalenceSet
)*
GetEquivalenceSet
::=
java code
EquivalenceSet
::=
<LBRACKET>
EquivalenceObject
<COMMA>
EquivalenceObjectList
<RBRACKET>
skipToNextMatchRbracket
::=
<COMMA>
EquivalenceObject
( <COMMA>
EquivalenceObject
)* <RBRACKET>
EquivalenceObjectList
::=
EquivalenceObject
( <COMMA>
EquivalenceObject
)*
EquivalenceObject
::=
Variable
CommonStmt
::=
<COMMON> ( <DIVIDE> (
Name
)? <DIVIDE> )?
CommonBlockObjectList
( ( <COMMA> )? <DIVIDE> (
Name
)? <DIVIDE>
CommonBlockObjectList
)*
CommonBlockObjectList
::=
CommonBlockObject
( <COMMA>
CommonBlockObject
)*
CommonBlockObject
::=
Name
( <LBRACKET>
ExplicitShapeSpecList
<RBRACKET> )?
Variable
::=
VariableOrConstantSubobject
VariableOrConstantSubobject
::=
PartRef1
( ( <PERCENT>
PartRef
)+ ( <LBRACKET>
SubstringRange
<RBRACKET> | ) | <LBRACKET>
SubstringRange
<RBRACKET> | )
DefaultLogicalVariable
::=
Variable
DefaultCharVariable
::=
Variable
ScalarDefaultCharVariable
::=
DefaultCharVariable
ScalarIntVariable
::=
IntVariable
IntVariable
::=
Variable
DefaultIntVariable
::=
Variable
SubstringRange
::=
(
Expr
)? <COLON> (
Expr
)?
SubstringRange1
::=
(
Expr
)? <COLON> (
Expr
)?
SectionSubscriptList
::=
SectionSubscript
( <COMMA>
SectionSubscript
)*
PartRef
::=
Name
( <LBRACKET>
SectionSubscriptList
<RBRACKET> | )
PartRef1
::=
Name
( <LBRACKET>
SectionSubscriptList
<RBRACKET> | )
SectionSubscript
::=
Subscript
( <COLON> ( <COLON>
Stride
| (
Subscript
( <COLON>
Stride
)? )? ) | )
|
<COLON> ( <COLON>
Stride
| (
Subscript
( <COLON>
Stride
)? )? )
Subscript
::=
ScalarIntExpr
Stride
::=
ScalarIntExpr
AllocateStmt
::=
<ALLOCATE> <LBRACKET>
AllocationList
( <COMMA> <STAT>
StatVariable
)? <RBRACKET>
StatVariable
::=
ScalarIntVariable
AllocationList
::=
Allocation
( <COMMA>
Allocation
)*
Allocation
::=
AllocateObject
( <LBRACKET>
AllocateShapeSpecList
<RBRACKET> )?
AllocateShapeSpecList
::=
AllocateShapeSpec
( <COMMA>
AllocateShapeSpec
)*
AllocateObject
::=
VarNameOrStructureComponent
VarNameOrStructureComponent
::=
Name
( <LBRACKET>
SectionSubscriptList
<RBRACKET> <PERCENT>
RestVarNameOrStructureComponent
| <PERCENT>
RestVarNameOrStructureComponent
| )
RestVarNameOrStructureComponent
::=
Name
( <LBRACKET>
SectionSubscriptList
<RBRACKET> <PERCENT>
RestVarNameOrStructureComponent
| <PERCENT>
RestVarNameOrStructureComponent
| )
AllocateShapeSpec
::=
(
AllocateLowerBound
<COLON> )?
AllocateUpperBound
AllocateLowerBound
::=
ScalarIntExpr
AllocateUpperBound
::=
ScalarIntExpr
NullifyStmt
::=
<NULLIFY> <LBRACKET>
PointerObjectList
<RBRACKET>
PointerObjectList
::=
PointerObject
( <COMMA>
PointerObject
)*
PointerObject
::=
VarNameOrStructureComponent
DeallocateStmt
::=
<DEALLOCATE> <LBRACKET>
AllocateObjectList
( <RBRACKET> | <COMMA> <STAT>
StatVariable
<RBRACKET> )
AllocateObjectList
::=
AllocateObject
( <COMMA>
AllocateObject
)*
Primary
::=
(
StructureConstructor
|
FunctionReference
|
Constant
( <LBRACKET>
SubstringRange1
<RBRACKET> )? |
VariableOrConstantSubobject
|
ArrayConstructor
| <LBRACKET>
Expr
<RBRACKET> )
ScalarConstantSubobject
::=
ConstantSubobject
ConstantSubobject
::=
VariableOrConstantSubobject
Level1Expr
::=
(
DefinedOperator
Primary
|
Primary
)
MultOperand
::=
Level1Expr
(
PowerOp
MultOperand
)?
AddOperand
::=
MultOperand
(
MultOp
MultOperand
)*
makeMultExpression
::=
java code
Level2Expr
::=
(
AddOp
AddOperand
(
AddOp
AddOperand
)* |
AddOperand
(
AddOp
AddOperand
)* )
makePosNegExpression
::=
java code
makeAdditiveExpression
::=
java code
PowerOp
::=
<POWER>
MultOp
::=
( <MULTIPLY> | <DIVIDE> )
AddOp
::=
( <PLUS> | <MINUS> )
Level3Expr
::=
Level2Expr
(
ConcatOp
Level2Expr
)*
ConcatOp
::=
<CONCAT>
Level4Expr
::=
Level3Expr
(
RelOp
Level3Expr
)?
makeRelExpression
::=
java code
RelOp
::=
( <EQ> | <NE> | <LT> | <LE> | <GT> | <GE> )
AndOperand
::=
NotOp
Level4Expr
|
Level4Expr
OrOperand
::=
AndOperand
(
AndOp
AndOperand
)*
EquivOperand
::=
OrOperand
(
OrOp
OrOperand
)*
Level5Expr
::=
EquivOperand
(
EquivOp
EquivOperand
)*
makeEquivExpression
::=
java code
NotOp
::=
<NOT>
AndOp
::=
<AND>
OrOp
::=
<OR>
EquivOp
::=
<EQV>
|
<NEQV>
ScalarExpr
::=
Expr
Expr
::=
Expr1
ScalarLogicalExpr
::=
LogicalExpr
LogicalExpr
::=
Expr
ScalarIntExpr
::=
IntExpr
Expr1
::=
Level5Expr
(
DefinedOperator
Level5Expr
)*
DefaultCharExpr
::=
Expr
ScalarDefaultCharExpr
::=
DefaultCharExpr
IntExpr
::=
Expr
NumericExpr
::=
Expr
ScalarNumericExpr
::=
NumericExpr
InitializationExpr
::=
Expr
ScalarIntInitializationExpr
::=
IntInitializationExpr
IntInitializationExpr
::=
IntExpr
SpecificationExpr
::=
ScalarIntExpr
AssignmentStmt
::=
(
Name
<LBRACKET> <RBRACKET> <EQUAL>
Expr
|
Variable
<EQUAL>
Expr
)
PointerAssignmentStmt
::=
PointerObject
<EQGT>
Target
Target
::=
Variable
|
Expr
WhereStmt
::=
<WHERE> <LBRACKET>
MaskExpr
<RBRACKET>
WhereAssignmentStmt
WhereConstruct
::=
WhereConstructStmt
Cmnt
(
WhereBodyConstruct
)* (
MaskedElseWhereStmt
Cmnt
(
WhereBodyConstruct
)* )* (
ElsewhereStmt
Cmnt
(
WhereBodyConstruct
)* )?
EndWhereStmt
WhereConstructStmt
::=
(
Name
<COLON> )? <WHERE> <LBRACKET>
MaskExpr
<RBRACKET>
WhereBodyConstruct
::=
(
WhereConstruct
Cmnt
|
WhereStmt
Cmnt
|
WhereAssignmentStmt
Cmnt
)
WhereAssignmentStmt
::=
AssignmentStmt
MaskExpr
::=
LogicalExpr
MaskedElseWhereStmt
::=
<ELSEWHERE> <LBRACKET>
MaskExpr
<RBRACKET> (
Name
)?
ElsewhereStmt
::=
<ELSEWHERE> (
Name
)?
EndWhereStmt
::=
<ENDWHERE> (
Name
)?
ForallConstruct
::=
ForallConstructStmt
Cmnt
(
ForallBodyConstruct
Cmnt
)*
EndForallStmt
ForallConstructStmt
::=
(
Name
<COLON> )? <FORALL>
ForallHeader
ForallHeader
::=
<LBRACKET>
ForallTripletSpecList
( <COMMA>
MaskExpr
)? <RBRACKET>
ForallTripletSpecList
::=
ForallTripletSpec
( <COMMA>
ForallTripletSpec
)*
ForallTripletSpec
::=
Name
<EQUAL>
Subscript
<COLON>
Subscript
( <COLON>
Stride
)?
ForallBodyConstruct
::=
(
WhereStmt
|
WhereConstruct
|
ForallStmt
|
ForallConstruct
|
ForallAssignmentStmt
)
ForallAssignmentStmt
::=
(
AssignmentStmt
|
PointerAssignmentStmt
)
EndForallStmt
::=
<ENDFORALL> (
Name
)?
ForallStmt
::=
<FORALL>
ForallHeader
ForallAssignmentStmt
Block
::=
|
ExecutionPartConstruct
Cmnt
Block
IfConstruct
::=
IfThenStmt
Cmnt
Block
(
ElseIfStmt
Cmnt
Block
)* (
ElseStmt
Cmnt
Block
EndIfStmt
|
EndIfStmt
)
IfThenStmt
::=
(
Name
<COLON> )? <IF> <LBRACKET>
ScalarLogicalExpr
<RBRACKET> <THEN>
ElseIfStmt
::=
<ELSEIF> <LBRACKET>
LogicalExpr
<RBRACKET> <THEN> (
Name
)?
ElseStmt
::=
<ELSE> (
Name
)?
EndIfStmt
::=
<ENDIF> (
Name
)?
IfStmt
::=
<IF> <LBRACKET>
ScalarLogicalExpr
<RBRACKET>
ActionStmt
CaseConstruct
::=
SelectCaseStmt
Cmnt
(
CaseStmt
Block
)*
EndSelectStmt
SelectCaseStmt
::=
(
Name
<COLON> )? <SELECTCASE> <LBRACKET>
CaseExpr
<RBRACKET>
CaseStmt
::=
<CASE>
CaseSelector
(
Name
)?
Cmnt
EndSelectStmt
::=
<ENDSELECT> (
Name
)?
CaseExpr
::=
Expr
CaseSelector
::=
<LBRACKET>
CaseValueRangeList
<RBRACKET>
|
<DEFAULTL>
CaseValueRangeList
::=
CaseValueRange
( <COMMA>
CaseValueRange
)*
CaseValueRange
::=
CaseValue
( <COLON> (
CaseValue
)? | )
|
<COLON>
CaseValue
CaseValue
::=
InitializationExpr
DoConstruct
::=
( (
LabelDoStmt
Cmnt
LabelDoBody
(
EndDoStmt
|
SharedTermDoConstruct
|
DoTermActionStmt
) |
NonlabelDoStmt
Cmnt
DoBlock
EndDoStmt
) )
LabelDoStmt
::=
(
Name
<COLON> )? <DO>
Label
(
LoopControl
)?
NonlabelDoStmt
::=
(
Name
<COLON> )? <DO> (
LoopControl
)?
LoopControl
::=
( <COMMA> )? (
DoVariable
<EQUAL>
ScalarIntExpr
<COMMA>
ScalarIntExpr
( <COMMA>
ScalarIntExpr
)? | <WHILE> <LBRACKET>
LogicalExpr
<RBRACKET> )
DoVariable
::=
ScalarIntVariable
DoBlock
::=
Block
EndDo
::=
(
EndDoStmt
|
ContinueStmt
)
EndDoStmt
::=
<ENDDO> (
Name
)?
LabelDoBody
::=
|
|
|
ExecutableConstruct
Cmnt
LabelDoBody
DoBody
::=
(
ExecutionPartConstruct
Cmnt
)*
DoTermActionStmt
::=
ActionStmt
SharedTermDoConstruct
::=
(
LabelDoStmt
Cmnt
LabelDoBody
(
SharedTermDoConstruct
|
DoTermSharedStmt
) )
DoTermSharedStmt
::=
ActionStmt
CycleStmt
::=
<CYCLE> (
Name
)?
ExitStmt
::=
<EXIT> (
Name
)?
GotoStmt
::=
<GOTO>
Label
ComputedGotoStmt
::=
<GOTO> <LBRACKET>
LabelList
<RBRACKET> ( <COMMA> )?
ScalarIntExpr
LabelList
::=
Label1
( <COMMA>
Label1
)*
ArithmeticIfStmt
::=
<IF> <LBRACKET>
ScalarNumericExpr
<RBRACKET>
Label1
<COMMA>
Label1
<COMMA>
Label1
ContinueStmt
::=
<CONTINUE>
StopStmt
::=
<STOP> (
StopCode
)?
StopCode
::=
ScalarCharConstant
|
<DIGIT_STOP_CODE>
IoUnit
::=
<MULTIPLY>
|
Expr
ExternalFileUnit
::=
ScalarIntExpr
OpenStmt
::=
<OPEN> <LBRACKET>
ConnectSpecList
<RBRACKET>
ConnectSpecList
::=
ConnectSpec
( <COMMA>
ConnectSpec
)*
ScalarDefaultIntVariable
::=
DefaultIntVariable
ScalarDefaultLogicalVariable
::=
DefaultLogicalVariable
ConnectSpec
::=
( <UNIT>
ExternalFileUnit
|
ExternalFileUnit
| <IOSTAT>
ScalarDefaultIntVariable
| <ERR>
Label
| <FILE>
FileNameExpr
| <STATUS>
ScalarDefaultCharExpr
| <ACCESSL>
ScalarDefaultCharExpr
| <FORM>
ScalarDefaultCharExpr
| <RECL>
ScalarIntExpr
| <BLANK>
ScalarDefaultCharExpr
| <POSITION>
ScalarDefaultCharExpr
| <ACTION>
ScalarDefaultCharExpr
| <DELIM>
ScalarDefaultCharExpr
| <PAD>
ScalarDefaultCharExpr
)
FileNameExpr
::=
DefaultCharExpr
CloseStmt
::=
<CLOSE> <LBRACKET>
CloseSpecList
<RBRACKET>
CloseSpecList
::=
CloseSpec
( <COMMA>
CloseSpec
)*
CloseSpec
::=
( <UNIT>
ExternalFileUnit
|
ExternalFileUnit
| <IOSTAT>
ScalarDefaultIntVariable
| <ERR>
Label
| <STATUS>
ScalarDefaultCharExpr
)
ReadStmt
::=
<READ> ( <LBRACKET>
IoControlSpecList
<RBRACKET> (
InputItemList
)? |
Format
( <COMMA>
InputItemList
)? )
InputItemList
::=
InputItem
( <COMMA>
InputItem
)*
IoControlSpecList
::=
IoControlSpec
( <COMMA>
IoControlSpec
)*
WriteStmt
::=
<WRITE> <LBRACKET>
IoControlSpecList
<RBRACKET> (
OutputItemList
)?
PrintStmt
::=
<PRINT>
Format
( <COMMA>
OutputItemList
)?
OutputItemList
::=
OutputItem
( <COMMA>
OutputItem
)*
IoControlSpec
::=
IoUnit
( | <COMMA> (
NamelistGroupName
|
Format
) )
|
<UNIT>
IoUnit
|
<FMT>
Format
|
<NML>
Name
|
<REC>
ScalarIntExpr
|
<IOSTAT>
ScalarDefaultIntVariable
|
<ERR>
Label
|
<ENDR>
Label
|
<ADVANCE>
ScalarDefaultCharExpr
|
<SIZE>
ScalarDefaultIntVariable
|
<EOR>
Label
Format
::=
DefaultCharExpr
|
Label
|
<MULTIPLY>
InputItem
::=
(
Variable
| <LBRACKET>
InputItem
( <COMMA>
InputItem
)* <COMMA>
IoImpliedDoControl
<RBRACKET> )
OutputItem
::=
OutputImpliedDo
|
Expr
OutputImpliedDo
::=
<LBRACKET>
OutputImpliedDoObjectList
<COMMA>
IoImpliedDoControl
<RBRACKET>
OutputImpliedDoObjectList
::=
OutputItem
RestOutputImpliedDoObjectList
RestOutputImpliedDoObjectList
::=
|
<COMMA>
OutputItem
RestOutputImpliedDoObjectList
IoImpliedDoControl
::=
IoDoVariable
<EQUAL>
ScalarIntExpr
<COMMA>
ScalarIntExpr
( <COMMA>
ScalarIntExpr
)?
IoDoVariable
::=
ScalarIntVariable
BackspaceStmt
::=
<BACKSPACE> ( <LBRACKET>
PositionSpecList
<RBRACKET> |
ExternalFileUnit
)
EndfileStmt
::=
<ENDFILE> ( <LBRACKET>
PositionSpecList
<RBRACKET> |
ExternalFileUnit
)
RewindStmt
::=
<REWIND> ( <LBRACKET>
PositionSpecList
<RBRACKET> |
ExternalFileUnit
)
PositionSpecList
::=
PositionSpec
( <COMMA>
PositionSpec
)*
PositionSpec
::=
( <UNIT>
ExternalFileUnit
|
ExternalFileUnit
| <IOSTAT>
ScalarDefaultIntVariable
| <ERR>
Label
)
InquireStmt
::=
<INQUIRE> <LBRACKET> (
InquireSpecList
<RBRACKET> | <IOLENGTH>
ScalarDefaultIntVariable
<RBRACKET>
OutputItemList
)
InquireSpecList
::=
InquireSpec
( <COMMA>
InquireSpec
)*
InquireSpec
::=
( <UNIT>
ExternalFileUnit
|
ExternalFileUnit
| <FILE>
FileNameExpr
| <IOSTAT>
ScalarDefaultIntVariable
| <ERR>
Label
| <EXIST>
ScalarDefaultLogicalVariable
| <OPENED>
ScalarDefaultLogicalVariable
| <NUMBER>
ScalarDefaultIntVariable
| <NAMED>
ScalarDefaultLogicalVariable
| <NAMEI>
ScalarDefaultCharVariable
| <ACCESSL>
ScalarDefaultCharVariable
| <SEQUENTIAL>
ScalarDefaultCharVariable
| <DIRECT>
ScalarDefaultCharVariable
| <FORM>
ScalarDefaultCharVariable
| <FORMATTED>
ScalarDefaultCharVariable
| <UNFORMATTED>
ScalarDefaultCharVariable
| <RECL>
ScalarDefaultIntVariable
| <NEXTREC>
ScalarDefaultIntVariable
| <BLANK>
ScalarDefaultCharVariable
| <POSITION>
ScalarDefaultCharVariable
| <ACTION>
ScalarDefaultCharVariable
| <READI>
ScalarDefaultCharVariable
| <WRITEI>
ScalarDefaultCharVariable
| <READWRITE>
ScalarDefaultCharVariable
| <DELIM>
ScalarDefaultCharVariable
| <PAD>
ScalarDefaultCharVariable
)
FormatStmt
::=
<FORMAT>
FormatSpecification
FormatSpecification
::=
<LBRACKET> (
FormatItemList
)? <RBRACKET>
FormatItemList
::=
FormatItem
(
OptComma
FormatItem
)*
OptComma
::=
( <COMMA> )?
FormatItem
::=
( ( <R> )? ( <DATA_EDIT_DESC> | <LBRACKET>
FormatItemList
<RBRACKET> ) | <CONTROL_EDIT_DESC> | <CHAR_STRING_EDIT_DESC> )
MainProgram
::=
(
ProgramStmt
Cmnt
)?
SpecificationPart
(
ExecutionPart
)?
InternalSubprogramPart
EndProgramStmt
Cmnt
ProgramStmt
::=
<PROGRAM>
Progname
Progname
::=
Name
EndProgramStmt
::=
( <ENDPROGRAM>
OptName
| <END> )
Module
::=
ModuleStmt
Cmnt
SpecificationPart
ModuleSubprogramPart
EndModuleStmt
Cmnt
ModuleStmt
::=
<MODULE>
Name
EndModuleStmt
::=
( <ENDMODULE>
OptName
| <END> )
UseStmt
::=
<USE>
ModuleName
( <COMMA> ( <ONLYCOLON> (
OnlyList
)? |
RenameList
) | )
ModuleName
::=
Name
OnlyList
::=
Only
( <COMMA>
Only
)*
RenameList
::=
Rename
( <COMMA>
Rename
)*
Rename
::=
Name
<EQGT>
Name
Only
::=
(
OnlyRename
|
OnlyUseName
| <OPERATOR> <LBRACKET>
Operator
<RBRACKET> | <ASSIGNMENT> <LBRACKET> <EQUAL> <RBRACKET> )
Operator
::=
(
DefinedOperator
|
IntrinsicOperator
)
OnlyUseName
::=
Name
OnlyRename
::=
Name
<EQGT>
Name
BlockData
::=
BlockDataStmt
Cmnt
SpecificationPart
EndBlockDataStmt
Cmnt
BlockDataStmt
::=
<BLOCKDATA>
Blockname
EndBlockDataStmt
::=
<ENDBLOCKDATA>
OptName
|
<END>
Blockname
::=
(
Name
)?
BeginInterfaceDecl
::=
java code
FinishInterfaceDecl
::=
java code
DeclareInterfaceModuleProcs
::=
java code
InterfaceBlock
::=
<INTERFACE> (
Cmnt
(
InterfaceBody
)*
EndInterfaceStmt
Cmnt
|
GenericSpec
Cmnt
(
InterfaceBody
)* (
ModuleProcedureStmt
Cmnt
)*
EndInterfaceStmt
Cmnt
)
EndInterfaceStmt
::=
<ENDINTERFACE>
InterfaceBody
::=
(
FunctionStmt
Cmnt
SpecificationPart
EndFunctionStmt
|
SubroutineStmt
Cmnt
SpecificationPart
EndSubroutineStmt
)
Cmnt
ModuleProcedureStmt
::=
<MODULEPROCEDURE>
ProcedureNameList
ProcedureNameList
::=
Name
( <COMMA>
Name
)*
GenericSpec
::=
(
Name
| <OPERATOR> <LBRACKET>
Operator
<RBRACKET> | <ASSIGNMENT> <LBRACKET> <EQUAL> <RBRACKET> )
ExternalStmt
::=
<EXTERNAL>
OptDoubleColon
Name
( <COMMA>
Name
)*
IntrinsicStmt
::=
<INTRINSIC>
OptDoubleColon
Name
( <COMMA>
Name
)*
FunctionReference
::=
Name
<LBRACKET> (
ActualArgSpecList
)? <RBRACKET>
CallStmt
::=
<CALL>
Name
( <LBRACKET> (
ActualArgSpecList
)? <RBRACKET> )?
ActualArgSpecList
::=
ActualArgSpec
( <COMMA>
ActualArgSpec
)*
ActualArgSpec
::=
(
Name
<EQUAL> )?
ActualArg
ActualArg
::=
Name
|
Expr
|
<MULTIPLY>
Label
FuncRefName
::=
Name
FunctionSubprogram
::=
FunctionStmt
Cmnt
SpecificationPart
(
ExecutionPart
)?
InternalSubprogramPart
EndFunctionStmt
Cmnt
FunctionStmt
::=
(
FunctionPrefix
)? <FUNCTION>
Funcname
FuncArglist
OptResult
Funcname
::=
Name
FuncArglist
::=
( <LBRACKET> (
DummyArgList
)? <RBRACKET> )?
SubroutinePrefix
::=
SubroutinePrefixSpec
(
SubroutinePrefixSpec
)*
FunctionPrefix
::=
FunctionPrefixSpec
(
FunctionPrefixSpec
)*
SubroutinePrefixSpec
::=
<RECURSIVE>
|
<PURE>
|
<ELEMENTAL>
FunctionPrefixSpec
::=
(
TypeSpec
| <RECURSIVE> | <PURE> | <ELEMENTAL> )
EndFunctionStmt
::=
( <ENDFUNCTION>
OptName
| <END> )
SubroutineSubprogram
::=
SubroutineStmt
Cmnt
SpecificationPart
(
ExecutionPart
)?
InternalSubprogramPart
EndSubroutineStmt
Cmnt
SubroutineStmt
::=
(
SubroutinePrefix
)? <SUBROUTINE>
Procname
Arglist
Procname
::=
Name
Arglist
::=
( <LBRACKET> (
DummyArgList
)? <RBRACKET> )?
DummyArgList
::=
DummyArg
( <COMMA>
DummyArg
)*
DummyArg
::=
Name
|
<MULTIPLY>
EndSubroutineStmt
::=
( <ENDSUBROUTINE>
OptName
| <END> )
EntryStmt
::=
<ENTRY>
Name
( <LBRACKET> (
DummyArgList
)? <RBRACKET> ( <RESULT> <LBRACKET>
Name
<RBRACKET> )? )?
ReturnStmt
::=
<RETURN> (
ScalarIntExpr
)?
ContainsStmt
::=
<CONTAINS>
StmtFunctionStmt
::=
Name
FuncArglist
<EQUAL>
ScalarExpr
Cmnt
::=
( <SEMICOLON> ( <EOL> )? | <EOL> )
OptLabel
errorSkipToStmtEnd
::=
java code
OptResult
::=
( <RESULT> <LBRACKET>
Name
<RBRACKET> )?
OptName
::=
(
Name
)?
Name
::=
<NAME>
NewLabel
::=
<LABEL>
Label
::=
<LABEL>
Label1
::=
<LABEL1>
LookupLabel
::=
java code
DeclareVar
::=
java code
DeclareVarOrFun
::=
java code
DeclareVarWithAttribute
::=
java code
DeclareOptionalArg
::=
java code
DeclareAccessId
::=
java code
DeclareDefaultAccess
::=
java code
DeclareSavedObject
::=
java code
DeclareSavedCommonBlock
::=
java code
DeclareArrayDimension
::=
java code
DeclareAllocatableArray
::=
java code
DeclarePointerObject
::=
java code
DeclareTargetObject
::=
java code
DeclareNamedConstant
::=
java code
DeclareExternal
::=
java code
DeclareIntrinsic
::=
java code
NameEqualNameToken
::=
java code
LookaheadAfterContains
::=
java code
LookaheadAfterEndProcedure
::=
java code
LookaheadOneContainedProcedure
::=
java code
LookaheadContainedProcedures
::=
java code
FillInImplicitDecls
::=
java code