0024897: Possibility of uncontrolled exit if scanner fails in ExprIntrp
[occt.git] / src / ExprIntrp / ExprIntrp.yacc
CommitLineData
b311480e 1/*
2/* Copyright (c) 1997-1999 Matra Datavision
973c2be1 3 Copyright (c) 1999-2014 OPEN CASCADE SAS
b311480e 4
973c2be1 5 This file is part of Open CASCADE Technology software library.
b311480e 6
d5f74e42 7 This library is free software; you can redistribute it and/or modify it under
8 the terms of the GNU Lesser General Public License version 2.1 as published
973c2be1 9 by the Free Software Foundation, with special exception defined in the file
10 OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 distribution for complete text of the license and disclaimer of any warranty.
b311480e 12
973c2be1 13 Alternatively, this file may be used under the terms of Open CASCADE
14 commercial license or contractual agreement.
b311480e 15*/
16
7fd59977 17%{
2a54ebbf 18#include <ExprIntrp_yaccintrf.hxx>
19
7fd59977 20extern void ExprIntrp_EndOfFuncDef();
21extern void ExprIntrp_EndOfRelation();
22extern void ExprIntrp_AssignVariable();
23extern void ExprIntrp_EndOfAssign();
24extern void ExprIntrp_Deassign();
25extern void ExprIntrp_SumOperator();
26extern void ExprIntrp_MinusOperator();
27extern void ExprIntrp_ProductOperator();
28extern void ExprIntrp_DivideOperator();
29extern void ExprIntrp_ExpOperator();
30extern void ExprIntrp_UnaryMinusOperator();
31extern void ExprIntrp_VariableIdentifier();
32extern void ExprIntrp_NumValue();
33extern void ExprIntrp_EndFunction();
34extern void ExprIntrp_EndDerFunction();
35extern void ExprIntrp_EndDifferential();
36extern void ExprIntrp_EndDiffFunction();
37extern void ExprIntrp_EndFuncArg();
38extern void ExprIntrp_NextFuncArg();
39extern void ExprIntrp_StartFunction();
40extern void ExprIntrp_DefineFunction();
41extern void ExprIntrp_StartDerivate();
42extern void ExprIntrp_EndDerivate();
43extern void ExprIntrp_DiffVar();
44extern void ExprIntrp_DiffDegree();
45extern void ExprIntrp_VerDiffDegree();
46extern void ExprIntrp_DiffDegreeVar();
47extern void ExprIntrp_StartDifferential();
48extern void ExprIntrp_StartFunction();
49extern void ExprIntrp_EndFuncArg();
50extern void ExprIntrp_NextFuncArg();
51extern void ExprIntrp_VariableIdentifier();
52extern void ExprIntrp_Derivation();
53extern void ExprIntrp_EndDerivation();
54extern void ExprIntrp_DerivationValue();
55extern void ExprIntrp_ConstantIdentifier();
56extern void ExprIntrp_ConstantDefinition();
57extern void ExprIntrp_VariableIdentifier();
58extern void ExprIntrp_NumValue();
59extern void ExprIntrp_Sumator();
60extern void ExprIntrp_VariableIdentifier();
61extern void ExprIntrp_Productor();
62extern void ExprIntrp_EndOfEqual();
105aae76 63
105aae76 64// disable MSVC warnings in bison code
65#ifdef _MSC_VER
d5f74e42 66#pragma warning(disable:4131 4244 4127 4702)
105aae76 67#endif
68
7fd59977 69%}
70
71%token SUMOP MINUSOP DIVIDEOP EXPOP MULTOP PARENTHESIS BRACKET ENDPARENTHESIS ENDBRACKET VALUE IDENTIFIER COMMA DIFFERENTIAL DERIVATE DERIVKEY ASSIGNOP DEASSIGNKEY EQUALOP RELSEPARATOR CONSTKEY SUMKEY PRODKEY
72%start exprentry
73%left SUMOP MINUSOP
74%left DIVIDEOP MULTOP
75%left EXPOP
76%{
77%}
78%%
79
80exprentry : GenExpr
81 | Assignment
82 | Deassignment
83 | FunctionDefinition {ExprIntrp_EndOfFuncDef();}
84 | RelationList {ExprIntrp_EndOfRelation();}
85 ;
86
87Assignment : IDENTIFIER {ExprIntrp_AssignVariable();} ASSIGNOP GenExpr {ExprIntrp_EndOfAssign();}
88 ;
89
90Deassignment : DEASSIGNKEY BRACKET IDENTIFIER {ExprIntrp_Deassign();} ENDBRACKET
91 ;
92
93GenExpr : GenExpr SUMOP GenExpr {ExprIntrp_SumOperator();}
94 | GenExpr MINUSOP GenExpr {ExprIntrp_MinusOperator();}
95 | GenExpr MULTOP GenExpr {ExprIntrp_ProductOperator();}
96 | GenExpr DIVIDEOP GenExpr {ExprIntrp_DivideOperator();}
97 | GenExpr EXPOP GenExpr {ExprIntrp_ExpOperator();}
98 | PARENTHESIS GenExpr ENDPARENTHESIS
99 | BRACKET GenExpr ENDBRACKET
100 | MINUSOP GenExpr {ExprIntrp_UnaryMinusOperator();}
101 | SingleExpr
102 | Derivation
103 | ConstantDefinition
104 | Sumator
105 | Productor
106 ;
107
108SingleExpr : Single
109 | Function
110 ;
111
112
113Single : IDENTIFIER {ExprIntrp_VariableIdentifier();}
114 | VALUE {ExprIntrp_NumValue();}
115 ;
116
117Function : funcident PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndFunction();}
118 | DerFunctionId PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndDerFunction();}
119 | DiffFuncId {ExprIntrp_EndDifferential();} PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndDiffFunction();}
120 ;
121
122ListGenExpr : GenExpr {ExprIntrp_EndFuncArg();}
123 | GenExpr COMMA {ExprIntrp_NextFuncArg();} ListGenExpr
124 ;
125
126funcident : IDENTIFIER {ExprIntrp_StartFunction();}
127 ;
128
129FunctionDefinition : FunctionDef {ExprIntrp_DefineFunction();} ASSIGNOP GenExpr
130 ;
131
132DerFunctionId : IDENTIFIER {ExprIntrp_StartDerivate();} DERIVATE {ExprIntrp_EndDerivate();}
133 ;
134
135DiffFuncId : DIFFERENTIAL DiffId DIVIDEOP DIFFERENTIAL IDENTIFIER {ExprIntrp_DiffVar();}
136 | DIFFERENTIAL VALUE {ExprIntrp_DiffDegree();} DiffId DIVIDEOP DIFFERENTIAL VALUE {ExprIntrp_VerDiffDegree();} IDENTIFIER {ExprIntrp_DiffDegreeVar();}
137 ;
138
139DiffId : IDENTIFIER {ExprIntrp_StartDifferential();}
140 | DiffFuncId
141 ;
142
143FunctionDef : IDENTIFIER {ExprIntrp_StartFunction();} BRACKET ListArg ENDBRACKET
144 ;
145
146ListArg : unarg {ExprIntrp_EndFuncArg();}
147 | unarg COMMA {ExprIntrp_NextFuncArg();} ListArg
148 ;
149
150unarg : IDENTIFIER {ExprIntrp_VariableIdentifier();}
151 ;
152
153Derivation : DERIVKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_Derivation();} ENDBRACKET {ExprIntrp_EndDerivation();}
154 | DERIVKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_Derivation();} COMMA VALUE {ExprIntrp_DerivationValue();} ENDBRACKET {ExprIntrp_EndDerivation();}
155 ;
156
157ConstantDefinition : CONSTKEY BRACKET IDENTIFIER {ExprIntrp_ConstantIdentifier();} COMMA VALUE {ExprIntrp_ConstantDefinition();} ENDBRACKET
158 ;
159
160Sumator : SUMKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_VariableIdentifier();} COMMA GenExpr COMMA GenExpr COMMA VALUE {ExprIntrp_NumValue();} ENDBRACKET {ExprIntrp_Sumator();}
161 ;
162
163Productor : PRODKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_VariableIdentifier();} COMMA GenExpr COMMA GenExpr COMMA VALUE {ExprIntrp_NumValue();} ENDBRACKET {ExprIntrp_Productor();}
164 ;
165
166RelationList : SingleRelation
167 | SingleRelation RELSEPARATOR RelationList
168 | SingleRelation '\n' RelationList
169 ;
170
171SingleRelation : GenExpr EQUALOP GenExpr {ExprIntrp_EndOfEqual();}
172 ;
173