The DP Specification Language gDPS
3.4 BNF Grammar of the gDPS language
The Backus-Naur form (BNF) for the gDPS language is given in this section.
The extended form is used, where “*” denotes “zero or more occurence”,
“+” denotes “one or more occurence”, and “?” denotes “zero or one occurence (option).” Terminal symbols are delimited by an opening angled bracket (“<”) and a closing angled bracket (“>”).
dpSpecification ::= <BEGIN> sectionList <END> <EOF>
sectionList ::= nameSection ( generalVariablesSection )?
( setVariablesSection )? ( generalFunctionsSection )?
stateTypeSection decisionVariableSection decisionSpaceSection goalSection
( dbfeBaseConditionsSection | dpfeBaseSection ) dpfeSection rewardFunctionSection transformationFunctionSection
( transitionWeightSection )?
nameSection ::= <NAME> <IDENTIFIER> <SEMICOLON>
generalVariablesSection ::= <GENERAL_VARIABLES>
setVariablesSection ::= <SET_VARIABLES_BEGIN>
( setVariableAssignment )* <SET_VARIABLES_END>
setVariableAssignment ::= <SET> <IDENTIFIER> <EQUALS>
setUnionExpression <SEMICOLON>
setUnionExpression ::= setIntersectionExpression ( <SETUNION> setIntersectionExpression )*
setIntersectionExpression ::= setDifferenceExpression ( <SETINTERSECTION> setDifferenceExpression )*
setDifferenceExpression ::= setPrimaryExpression ( <SETMINUS> setPrimaryExpression )*
setPrimaryExpression ::= setGlobalFunctional
| setArrayVariable
| explicitSet
| <LPAREN> setUnionExpression <RPAREN>
setGlobalFunctional ::= <IDENTIFIER> <LPAREN>
setGlobalFunctionalArgumentList <RPAREN>
setGlobalFunctionalArgumentList ::= ( globalFunctionalArgument
( <COMMA> globalFunctionalArgument )* )?
setArrayVariable ::= <IDENTIFIER>
( <LBRACKET> additiveExpression <RBRACKET> )*
explicitSet ::= explicitSetInDoubleDotNotation
| explicitSetEnumeration
explicitSetInDoubleDotNotation ::= <LBRACE> additiveExpression
<COMMA> <DOUBLEDOT> <COMMA> additiveExpression <RBRACE>
explicitSetEnumeration ::= <LBRACE> ( additiveExpression ( <COMMA> additiveExpression )* )? <RBRACE>
additiveExpression ::= multiplicativeExpression ( ( <PLUS> | <MINUS> ) multiplicativeExpression )*
multiplicativeExpression ::= primaryExpression ( ( <MULT> | <DIV> | <MOD> ) primaryExpression )*
primaryExpression ::= globalFunctional
| arrayVariable
| <INTEGER_LITERAL>
| <LPAREN> additiveExpression <RPAREN>
globalFunctional ::= <IDENTIFIER> <LPAREN>
globalFunctionalArgumentList <RPAREN>
globalFunctionalArgumentList ::= ( globalFunctionalArgument ( <COMMA> globalFunctionalArgument )* )?
globalFunctionalArgument ::= arrayVariable
arrayVariable ::= <IDENTIFIER> ( <LBRACKET> additiveExpression
<RBRACKET> )*
generalFunctionsSection ::= <GENERAL_FUNCTIONS>
stateTypeSection ::= <STATE_TYPE> <COLON>
stateTypeParameterList <SEMICOLON>
stateTypeParameterList ::= <LPAREN> stateTypeFormalParameter ( <COMMA> stateTypeFormalParameter )* <RPAREN>
stateTypeFormalParameter ::= stateTypeType stateTypeVariableDeclaratorId
stateTypeType ::= <INT> | <SET>
stateTypeVariableDeclaratorId ::= <IDENTIFIER>
decisionVariableSection ::= <DECISION_VARIABLE> <COLON>
decisionVariableType <IDENTIFIER> <SEMICOLON>
decisionVariableType ::= <INT> | <STRING>
decisionSpaceSection ::= <DECISION_SPACE> <COLON> <IDENTIFIER>
<LPAREN> argumentList <RPAREN> <EQUALS>
decisionSetUnionExpression <SEMICOLON>
argumentList ::= <IDENTIFIER> ( <COMMA> <IDENTIFIER> )*
decisionSetUnionExpression ::= decisionSetIntersectionExpression ( <SETUNION> decisionSetIntersectionExpression )*
decisionSetIntersectionExpression ::=
decisionSetDifferenceExpression ( <SETINTERSECTION>
decisionSetDifferenceExpression )*
decisionSetDifferenceExpression ::= decisionSetPrimaryExpression ( <SETMINUS> decisionSetPrimaryExpression )*
decisionSetPrimaryExpression ::= decisionSetGlobalFunctional
| decisionSetArrayVariable
| decisionSetExplicit
| <LPAREN> decisionSetUnionExpression <RPAREN>
decisionSetGlobalFunctional ::= <IDENTIFIER> <LPAREN>
decisionSetGlobalFunctionalArgumentList <RPAREN>
decisionSetGlobalFunctionalArgumentList ::=
( decisionSetGlobalFunctionalArgument ( <COMMA>
decisionSetGlobalFunctionalArgument )* )?
decisionSetGlobalFunctionalArgument ::= <IDENTIFIER>
decisionSetArrayVariable ::= <IDENTIFIER> ( <LBRACKET>
decisionAdditiveExpression <RBRACKET> )*
decisionSetExplicit ::= decisionSetExplicitInDoubleDotNotation
| decisionSetExplicitEnumeration
decisionSetExplicitInDoubleDotNotation ::= <LBRACE>
decisionAdditiveExpression <COMMA> <DOUBLEDOT> <COMMA>
decisionAdditiveExpression <RBRACE>
decisionSetExplicitEnumeration ::= <LBRACE>
decisionAdditiveExpression ( <COMMA>
decisionAdditiveExpression )* <RBRACE>
decisionAdditiveExpression ::= decisionMultiplicativeExpression ( ( <PLUS> | <MINUS> ) decisionMultiplicativeExpression )*
decisionMultiplicativeExpression ::= decisionPrimaryExpression ( ( <MULT> | <DIV> | <MOD> ) decisionPrimaryExpression )*
decisionPrimaryExpression ::= decisionArrayVariable
| <INTEGER_LITERAL>
| <LPAREN> decisionAdditiveExpression <RPAREN>
decisionArrayVariable ::= <IDENTIFIER> ( <LBRACKET>
decisionAdditiveExpression <RBRACKET> )*
goalSection ::= <GOAL> <COLON> <IDENTIFIER> <LPAREN>
primaryExpression ( <COMMA> primaryExpression )* <RPAREN>
<SEMICOLON>
singleState ::= <LPAREN> numberOrConstant ( <COMMA>
numberOrConstant )* <RPAREN>
numberOrConstant ::= <INTEGER_LITERAL> | <IDENTIFIER>
dbfeBaseConditionsSection ::= <DPFE_BASE_CONDITIONS> <COLON>
( dpfeBaseConditionStatement )+
dpfeBaseConditionStatement ::= <IDENTIFIER> <LPAREN>
argumentList <RPAREN> <EQUALS>
rewardFunctionAdditiveExpression <WHEN> <LPAREN>
conditionalOrCExpression <RPAREN> <SEMICOLON>
conditionalOrCExpression ::= conditionalAndCExpression ( <COND_OR> conditionalAndCExpression )*
conditionalAndCExpression ::= equalityCExpression ( <COND_AND> equalityCExpression )*
equalityCExpression ::= setEqualityCExpression
| numericalEqualityCExpression setEqualityCExpression ::=
transformationFunctionSetUnionExpression <SETEQUALS>
transformationFunctionSetUnionExpression
numericalEqualityCExpression ::= relationalCExpression ( ( <EQ> | <NE> ) relationalCExpression )*
relationalCExpression ::= negatingCExpression
( ( <LT> | <GT> | <LTE> | <GTE> ) negatingCExpression )*
negatingCExpression ::= ( <EXCLAMATION_MARK> )?
primaryCExpression
primaryCExpression ::= transformationFunctionAdditiveExpression
| <LPAREN> conditionalOrCExpression <RPAREN>
dpfeBaseSection ::= <DPFE_BASE> <COLON> ( dpfeBaseStatement )+
dpfeBaseStatement ::= dpfeBaseBlock
| dpfeBaseForStatement
| dpfeBaseAtomicStatement
dpfeBaseBlock ::= <LBRACE> ( dpfeBaseStatement )* <RBRACE>
dpfeBaseForStatement ::= <FOR> <LPAREN> <IDENTIFIER> <EQUALS>
numberOrConstant <SEMICOLON> <IDENTIFIER>
( <LT> | <LTE> | <GT> | <GTE> ) numberOrConstant <SEMICOLON>
<IDENTIFIER> ( <INC> | <DEC> ) <RPAREN> dpfeBaseStatement dpfeBaseAtomicStatement ::= <IDENTIFIER> singleState <EQUALS>
rewardFunctionAdditiveExpression <SEMICOLON>
dpfeSection ::= <DPFE> <COLON> <IDENTIFIER> <LPAREN>
argumentList <RPAREN> <EQUALS> dpfeMinOrMax dpfeDecisionLoop dpfeExpression <SEMICOLON>
dpfeMinOrMax ::= <MIN_> | <MAX_>
dpfeDecisionLoop ::= <LBRACE> <IDENTIFIER> <IN> <IDENTIFIER>
<RBRACE>
dpfeExpression ::= <LBRACE> ( dpfeAdditiveExpression | dpfeMultiplicativeExpression ) <RBRACE>
dpfeAdditiveExpression ::= dpfeFunctional ( <PLUS> dpfeFunctional )+
dpfeMultiplicativeExpression ::= dpfeFunctional ( <MULT> dpfeFunctional )+
dpfeFunctional ::= dpfeFunctionalAtom
| dpfeDoublyNestedFunctional
dpfeFunctionalAtom ::= <IDENTIFIER> <LPAREN> argumentList
<RPAREN>
dpfeDoublyNestedFunctional ::= ( <IDENTIFIER> <DOT> )?
<IDENTIFIER> <LPAREN> <IDENTIFIER> <LPAREN> argumentList
<RPAREN> <RPAREN>
rewardFunctionSection ::= <REWARD_FUNCTION> <COLON>
<IDENTIFIER> <LPAREN> argumentList <RPAREN> <EQUALS>
rewardFunctionBody <SEMICOLON>
rewardFunctionBody ::= rewardFunctionAdditiveExpression rewardFunctionAdditiveExpression ::=
rewardFunctionMultiplicativeExpression ( ( <PLUS> | <MINUS> ) rewardFunctionMultiplicativeExpression )*
rewardFunctionMultiplicativeExpression ::=
rewardFunctionPrimaryExpression ( ( <MULT> | <DIV> | <MOD> ) rewardFunctionPrimaryExpression )*
rewardFunctionPrimaryExpression ::=
rewardFunctionGlobalFunctional
| rewardFunctionArrayVariable
| rewardFunctionLiteral
| <LPAREN> rewardFunctionAdditiveExpression <RPAREN>
rewardFunctionGlobalFunctional ::= <IDENTIFIER> <LPAREN>
rewardFunctionGlobalFunctionalArgumentList <RPAREN>
rewardFunctionGlobalFunctionalArgumentList ::=
( rewardFunctionGlobalFunctionalArgument ( <COMMA>
rewardFunctionGlobalFunctionalArgument )* )?
rewardFunctionGlobalFunctionalArgument ::= <IDENTIFIER>
rewardFunctionArrayVariable ::= <IDENTIFIER> ( <LBRACKET>
rewardFunctionAdditiveExpression <RBRACKET> )*
rewardFunctionLiteral ::= <INTEGER_LITERAL>
| <FLOATING_POINT_LITERAL>
transformationFunctionSection ::= <TRANSFORMATION_FUNCTION>
<COLON> ( <IDENTIFIER> <LPAREN> argumentList <RPAREN>
<EQUALS> transformationFunctionNewState <SEMICOLON> )+
transformationFunctionNewState ::= <LPAREN>
transformationFunctionNewStateCoordinateList <RPAREN>
transformationFunctionNewStateCoordinateList ::=
transformationFunctionNewStateCoordinate ( <COMMA>
transformationFunctionNewStateCoordinate )*
transformationFunctionNewStateCoordinate ::=
transformationFunctionAdditiveExpression
| transformationFunctionSetUnionExpression transformationFunctionAdditiveExpression ::=
transformationFunctionMultiplicativeExpression ( ( <PLUS> | <MINUS> )
transformationFunctionMultiplicativeExpression )*
transformationFunctionMultiplicativeExpression ::=
transformationFunctionPrimaryExpression ( ( <MULT> | <DIV> | <MOD> )
transformationFunctionPrimaryExpression )*
transformationFunctionPrimaryExpression ::=
transformationFunctionGlobalFunctional
| transformationFunctionArrayVariable
| <INTEGER_LITERAL>
| <LPAREN> transformationFunctionAdditiveExpression <RPAREN>
transformationFunctionGlobalFunctional ::= <IDENTIFIER> <LPAREN>
transformationFunctionGlobalFunctionalArgumentList <RPAREN>
transformationFunctionGlobalFunctionalArgumentList ::=
( transformationFunctionGlobalFunctionalArgument ( <COMMA>
transformationFunctionGlobalFunctionalArgument )* )?
transformationFunctionGlobalFunctionalArgument ::= <IDENTIFIER>
transformationFunctionArrayVariable ::= <IDENTIFIER>
( <LBRACKET> transformationFunctionAdditiveExpression
<RBRACKET> )*
transformationFunctionSetUnionExpression ::=
transformationFunctionSetIntersectionExpression ( <SETUNION>
transformationFunctionSetIntersectionExpression )*
transformationFunctionSetIntersectionExpression ::=
transformationFunctionSetDifferenceExpression ( <SETINTERSECTION>
transformationFunctionSetDifferenceExpression )*
transformationFunctionSetDifferenceExpression ::=
transformationFunctionSetPrimaryExpression ( <SETMINUS>
transformationFunctionSetPrimaryExpression )*
transformationFunctionSetPrimaryExpression ::=
transformationFunctionSetGlobalFunctional
| transformationFunctionSetArrayVariable
| transformationFunctionExplicitSet
| <LPAREN> transformationFunctionSetUnionExpression <RPAREN>
transformationFunctionSetGlobalFunctional ::= <IDENTIFIER>
<LPAREN>
transformationFunctionSetGlobalFunctionalArgumentList
<RPAREN>
transformationFunctionSetGlobalFunctionalArgumentList ::=
( transformationFunctionSetGlobalFunctionalArgument ( <COMMA>
transformationFunctionSetGlobalFunctionalArgument )* )?
transformationFunctionSetGlobalFunctionalArgument ::=
<IDENTIFIER>
transformationFunctionSetArrayVariable ::= <IDENTIFIER>
( <LBRACKET> transformationFunctionAdditiveExpression
<RBRACKET> )*
transformationFunctionExplicitSet ::=
transformationFunctionExplicitSetInDoubleDotNotation
| transformationFunctionExplicitSetEnumeration
transformationFunctionExplicitSetInDoubleDotNotation ::=
<LBRACE> transformationFunctionAdditiveExpression <COMMA>
<DOUBLEDOT> <COMMA> transformationFunctionAdditiveExpression
<RBRACE>
transformationFunctionExplicitSetEnumeration ::= <LBRACE>
( transformationFunctionAdditiveExpression ( <COMMA>
transformationFunctionAdditiveExpression )* )? <RBRACE>
transitionWeightSection ::= <TRANSITION_WEIGHTS> <COLON>
( <IDENTIFIER> <LPAREN> argumentList <RPAREN> <EQUALS>
rewardFunctionAdditiveExpression <SEMICOLON> )+