From ab1469893c0a7a2d88c38cf6f0551fc4cc06ba55 Mon Sep 17 00:00:00 2001 From: esa Date: Thu, 9 Oct 2014 15:44:35 +0400 Subject: [PATCH] 0025329: ExprIntrp_GenExp can not parse unary plus Formatting Test case for issue CR25329 --- src/ExprIntrp/ExprIntrp.yacc | 78 ++++++++++++++------------- src/ExprIntrp/ExprIntrp_yaccintrf.cxx | 6 +++ tests/bugs/fclasses/bug25329 | 11 ++++ 3 files changed, 57 insertions(+), 38 deletions(-) create mode 100755 tests/bugs/fclasses/bug25329 diff --git a/src/ExprIntrp/ExprIntrp.yacc b/src/ExprIntrp/ExprIntrp.yacc index a00bc5243c..9a3b47630c 100644 --- a/src/ExprIntrp/ExprIntrp.yacc +++ b/src/ExprIntrp/ExprIntrp.yacc @@ -28,6 +28,7 @@ extern void ExprIntrp_ProductOperator(); extern void ExprIntrp_DivideOperator(); extern void ExprIntrp_ExpOperator(); extern void ExprIntrp_UnaryMinusOperator(); +extern void ExprIntrp_UnaryPlusOperator(); extern void ExprIntrp_VariableIdentifier(); extern void ExprIntrp_NumValue(); extern void ExprIntrp_EndFunction(); @@ -78,56 +79,57 @@ extern void ExprIntrp_EndOfEqual(); %% exprentry : GenExpr - | Assignment + | Assignment | Deassignment - | FunctionDefinition {ExprIntrp_EndOfFuncDef();} - | RelationList {ExprIntrp_EndOfRelation();} - ; + | FunctionDefinition {ExprIntrp_EndOfFuncDef();} + | RelationList {ExprIntrp_EndOfRelation();} + ; Assignment : IDENTIFIER {ExprIntrp_AssignVariable();} ASSIGNOP GenExpr {ExprIntrp_EndOfAssign();} - ; + ; Deassignment : DEASSIGNKEY BRACKET IDENTIFIER {ExprIntrp_Deassign();} ENDBRACKET ; -GenExpr : GenExpr SUMOP GenExpr {ExprIntrp_SumOperator();} - | GenExpr MINUSOP GenExpr {ExprIntrp_MinusOperator();} - | GenExpr MULTOP GenExpr {ExprIntrp_ProductOperator();} - | GenExpr DIVIDEOP GenExpr {ExprIntrp_DivideOperator();} - | GenExpr EXPOP GenExpr {ExprIntrp_ExpOperator();} - | PARENTHESIS GenExpr ENDPARENTHESIS - | BRACKET GenExpr ENDBRACKET - | MINUSOP GenExpr {ExprIntrp_UnaryMinusOperator();} - | SingleExpr +GenExpr : GenExpr SUMOP GenExpr {ExprIntrp_SumOperator();} + | GenExpr MINUSOP GenExpr {ExprIntrp_MinusOperator();} + | GenExpr MULTOP GenExpr {ExprIntrp_ProductOperator();} + | GenExpr DIVIDEOP GenExpr {ExprIntrp_DivideOperator();} + | GenExpr EXPOP GenExpr {ExprIntrp_ExpOperator();} + | PARENTHESIS GenExpr ENDPARENTHESIS + | BRACKET GenExpr ENDBRACKET + | MINUSOP GenExpr {ExprIntrp_UnaryMinusOperator();} + | SUMOP GenExpr {ExprIntrp_UnaryPlusOperator();} + | SingleExpr | Derivation | ConstantDefinition | Sumator | Productor - ; + ; SingleExpr : Single - | Function - ; + | Function + ; -Single : IDENTIFIER {ExprIntrp_VariableIdentifier();} - | VALUE {ExprIntrp_NumValue();} - ; +Single : IDENTIFIER {ExprIntrp_VariableIdentifier();} + | VALUE {ExprIntrp_NumValue();} + ; Function : funcident PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndFunction();} | DerFunctionId PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndDerFunction();} | DiffFuncId {ExprIntrp_EndDifferential();} PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndDiffFunction();} - ; + ; ListGenExpr : GenExpr {ExprIntrp_EndFuncArg();} - | GenExpr COMMA {ExprIntrp_NextFuncArg();} ListGenExpr - ; + | GenExpr COMMA {ExprIntrp_NextFuncArg();} ListGenExpr + ; funcident : IDENTIFIER {ExprIntrp_StartFunction();} - ; + ; FunctionDefinition : FunctionDef {ExprIntrp_DefineFunction();} ASSIGNOP GenExpr - ; + ; DerFunctionId : IDENTIFIER {ExprIntrp_StartDerivate();} DERIVATE {ExprIntrp_EndDerivate();} ; @@ -140,15 +142,15 @@ DiffId : IDENTIFIER {ExprIntrp_StartDifferential();} | DiffFuncId ; -FunctionDef : IDENTIFIER {ExprIntrp_StartFunction();} BRACKET ListArg ENDBRACKET - ; +FunctionDef : IDENTIFIER {ExprIntrp_StartFunction();} BRACKET ListArg ENDBRACKET + ; -ListArg : unarg {ExprIntrp_EndFuncArg();} - | unarg COMMA {ExprIntrp_NextFuncArg();} ListArg - ; +ListArg : unarg {ExprIntrp_EndFuncArg();} + | unarg COMMA {ExprIntrp_NextFuncArg();} ListArg + ; -unarg : IDENTIFIER {ExprIntrp_VariableIdentifier();} - ; +unarg : IDENTIFIER {ExprIntrp_VariableIdentifier();} + ; Derivation : DERIVKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_Derivation();} ENDBRACKET {ExprIntrp_EndDerivation();} | DERIVKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_Derivation();} COMMA VALUE {ExprIntrp_DerivationValue();} ENDBRACKET {ExprIntrp_EndDerivation();} @@ -163,11 +165,11 @@ Sumator : SUMKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_Variable Productor : PRODKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_VariableIdentifier();} COMMA GenExpr COMMA GenExpr COMMA VALUE {ExprIntrp_NumValue();} ENDBRACKET {ExprIntrp_Productor();} ; -RelationList : SingleRelation - | SingleRelation RELSEPARATOR RelationList - | SingleRelation '\n' RelationList - ; +RelationList : SingleRelation + | SingleRelation RELSEPARATOR RelationList + | SingleRelation '\n' RelationList + ; -SingleRelation : GenExpr EQUALOP GenExpr {ExprIntrp_EndOfEqual();} - ; +SingleRelation : GenExpr EQUALOP GenExpr {ExprIntrp_EndOfEqual();} + ; diff --git a/src/ExprIntrp/ExprIntrp_yaccintrf.cxx b/src/ExprIntrp/ExprIntrp_yaccintrf.cxx index 760a638aaa..e007ea5913 100644 --- a/src/ExprIntrp/ExprIntrp_yaccintrf.cxx +++ b/src/ExprIntrp/ExprIntrp_yaccintrf.cxx @@ -430,6 +430,12 @@ extern "C" void ExprIntrp_UnaryMinusOperator() ExprIntrp_Recept.Push(res->ShallowSimplified()); } +extern "C" void ExprIntrp_UnaryPlusOperator() +{ + Handle(Expr_GeneralExpression) op = ExprIntrp_Recept.Pop(); + ExprIntrp_Recept.Push(op); +} + extern "C" void ExprIntrp_VariableIdentifier() { const TCollection_AsciiString& thename = ExprIntrp_GetResult(); diff --git a/tests/bugs/fclasses/bug25329 b/tests/bugs/fclasses/bug25329 new file mode 100755 index 0000000000..e1eac0cddb --- /dev/null +++ b/tests/bugs/fclasses/bug25329 @@ -0,0 +1,11 @@ +puts "============" +puts "OCC25329" +puts "============" +puts "" +####################################################################### +# ExprIntrp_GenExp can not parse unary plus +####################################################################### + +pload QAcommands + +OCC22611 "+1" 1