• 沒有找到結果。

BNF Grammar of the gDPS language

在文檔中 123 Dynamic Programming (頁 127-134)

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> )+

在文檔中 123 Dynamic Programming (頁 127-134)

相關文件