0025329: ExprIntrp_GenExp can not parse unary plus
authoresa <esa@opencascade.com>
Thu, 9 Oct 2014 11:44:35 +0000 (15:44 +0400)
committerbugmaster <bugmaster@opencascade.com>
Thu, 9 Oct 2014 12:02:15 +0000 (16:02 +0400)
Formatting

Test case for issue CR25329

src/ExprIntrp/ExprIntrp.yacc
src/ExprIntrp/ExprIntrp_yaccintrf.cxx
tests/bugs/fclasses/bug25329 [new file with mode: 0755]

index a00bc52..9a3b476 100644 (file)
@@ -28,6 +28,7 @@ extern void ExprIntrp_ProductOperator();
 extern void ExprIntrp_DivideOperator();
 extern void ExprIntrp_ExpOperator();
 extern void ExprIntrp_UnaryMinusOperator();
 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();
 extern void ExprIntrp_VariableIdentifier();
 extern void ExprIntrp_NumValue();
 extern void ExprIntrp_EndFunction();
@@ -78,56 +79,57 @@ extern void ExprIntrp_EndOfEqual();
 %%
 
 exprentry          : GenExpr
 %%
 
 exprentry          : GenExpr
-                  | Assignment  
+                   | Assignment  
                    | Deassignment
                    | Deassignment
-                  | FunctionDefinition  {ExprIntrp_EndOfFuncDef();}
-                  | RelationList {ExprIntrp_EndOfRelation();}
-                  ;
+                   | FunctionDefinition  {ExprIntrp_EndOfFuncDef();}
+                   | RelationList {ExprIntrp_EndOfRelation();}
+                   ;
 
 Assignment         : IDENTIFIER {ExprIntrp_AssignVariable();} ASSIGNOP GenExpr {ExprIntrp_EndOfAssign();}
 
 Assignment         : IDENTIFIER {ExprIntrp_AssignVariable();} ASSIGNOP GenExpr {ExprIntrp_EndOfAssign();}
-                  ;
+                   ;
 
 Deassignment       : DEASSIGNKEY BRACKET IDENTIFIER {ExprIntrp_Deassign();} ENDBRACKET
                    ;
 
 
 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
                    | Derivation
                    | ConstantDefinition
                    | Sumator
                    | Productor
-                  ;
+                   ;
 
 SingleExpr         : Single
 
 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();}
 
 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();} 
 
 ListGenExpr        : GenExpr {ExprIntrp_EndFuncArg();} 
-                  | GenExpr COMMA {ExprIntrp_NextFuncArg();} ListGenExpr 
-                  ;
+                   | GenExpr COMMA {ExprIntrp_NextFuncArg();} ListGenExpr 
+                   ;
 
 funcident          : IDENTIFIER  {ExprIntrp_StartFunction();}
 
 funcident          : IDENTIFIER  {ExprIntrp_StartFunction();}
-                  ;
+                   ;
 
 FunctionDefinition : FunctionDef {ExprIntrp_DefineFunction();} ASSIGNOP GenExpr
 
 FunctionDefinition : FunctionDef {ExprIntrp_DefineFunction();} ASSIGNOP GenExpr
-                  ;
+                   ;
 
 DerFunctionId      : IDENTIFIER {ExprIntrp_StartDerivate();} DERIVATE {ExprIntrp_EndDerivate();}
                    ;
 
 DerFunctionId      : IDENTIFIER {ExprIntrp_StartDerivate();} DERIVATE {ExprIntrp_EndDerivate();}
                    ;
@@ -140,15 +142,15 @@ DiffId             : IDENTIFIER {ExprIntrp_StartDifferential();}
                    | DiffFuncId
                    ;
 
                    | 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();}
 
 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();}
                    ;
 
 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();}
+                   ;
 
 
index 760a638..e007ea5 100644 (file)
@@ -430,6 +430,12 @@ extern "C" void ExprIntrp_UnaryMinusOperator()
   ExprIntrp_Recept.Push(res->ShallowSimplified());
 }
 
   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();
 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 (executable)
index 0000000..e1eac0c
--- /dev/null
@@ -0,0 +1,11 @@
+puts "============"
+puts "OCC25329"
+puts "============"
+puts ""
+#######################################################################
+# ExprIntrp_GenExp can not parse unary plus
+#######################################################################
+
+pload QAcommands
+
+OCC22611 "+1" 1