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 |
20 | extern void ExprIntrp_EndOfFuncDef(); |
21 | extern void ExprIntrp_EndOfRelation(); |
22 | extern void ExprIntrp_AssignVariable(); |
23 | extern void ExprIntrp_EndOfAssign(); |
24 | extern void ExprIntrp_Deassign(); |
25 | extern void ExprIntrp_SumOperator(); |
26 | extern void ExprIntrp_MinusOperator(); |
27 | extern void ExprIntrp_ProductOperator(); |
28 | extern void ExprIntrp_DivideOperator(); |
29 | extern void ExprIntrp_ExpOperator(); |
30 | extern void ExprIntrp_UnaryMinusOperator(); |
31 | extern void ExprIntrp_VariableIdentifier(); |
32 | extern void ExprIntrp_NumValue(); |
33 | extern void ExprIntrp_EndFunction(); |
34 | extern void ExprIntrp_EndDerFunction(); |
35 | extern void ExprIntrp_EndDifferential(); |
36 | extern void ExprIntrp_EndDiffFunction(); |
37 | extern void ExprIntrp_EndFuncArg(); |
38 | extern void ExprIntrp_NextFuncArg(); |
39 | extern void ExprIntrp_StartFunction(); |
40 | extern void ExprIntrp_DefineFunction(); |
41 | extern void ExprIntrp_StartDerivate(); |
42 | extern void ExprIntrp_EndDerivate(); |
43 | extern void ExprIntrp_DiffVar(); |
44 | extern void ExprIntrp_DiffDegree(); |
45 | extern void ExprIntrp_VerDiffDegree(); |
46 | extern void ExprIntrp_DiffDegreeVar(); |
47 | extern void ExprIntrp_StartDifferential(); |
48 | extern void ExprIntrp_StartFunction(); |
49 | extern void ExprIntrp_EndFuncArg(); |
50 | extern void ExprIntrp_NextFuncArg(); |
51 | extern void ExprIntrp_VariableIdentifier(); |
52 | extern void ExprIntrp_Derivation(); |
53 | extern void ExprIntrp_EndDerivation(); |
54 | extern void ExprIntrp_DerivationValue(); |
55 | extern void ExprIntrp_ConstantIdentifier(); |
56 | extern void ExprIntrp_ConstantDefinition(); |
57 | extern void ExprIntrp_VariableIdentifier(); |
58 | extern void ExprIntrp_NumValue(); |
59 | extern void ExprIntrp_Sumator(); |
60 | extern void ExprIntrp_VariableIdentifier(); |
61 | extern void ExprIntrp_Productor(); |
62 | extern 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 | |
80 | exprentry : GenExpr |
81 | | Assignment |
82 | | Deassignment |
83 | | FunctionDefinition {ExprIntrp_EndOfFuncDef();} |
84 | | RelationList {ExprIntrp_EndOfRelation();} |
85 | ; |
86 | |
87 | Assignment : IDENTIFIER {ExprIntrp_AssignVariable();} ASSIGNOP GenExpr {ExprIntrp_EndOfAssign();} |
88 | ; |
89 | |
90 | Deassignment : DEASSIGNKEY BRACKET IDENTIFIER {ExprIntrp_Deassign();} ENDBRACKET |
91 | ; |
92 | |
93 | GenExpr : 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 | |
108 | SingleExpr : Single |
109 | | Function |
110 | ; |
111 | |
112 | |
113 | Single : IDENTIFIER {ExprIntrp_VariableIdentifier();} |
114 | | VALUE {ExprIntrp_NumValue();} |
115 | ; |
116 | |
117 | Function : funcident PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndFunction();} |
118 | | DerFunctionId PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndDerFunction();} |
119 | | DiffFuncId {ExprIntrp_EndDifferential();} PARENTHESIS ListGenExpr ENDPARENTHESIS {ExprIntrp_EndDiffFunction();} |
120 | ; |
121 | |
122 | ListGenExpr : GenExpr {ExprIntrp_EndFuncArg();} |
123 | | GenExpr COMMA {ExprIntrp_NextFuncArg();} ListGenExpr |
124 | ; |
125 | |
126 | funcident : IDENTIFIER {ExprIntrp_StartFunction();} |
127 | ; |
128 | |
129 | FunctionDefinition : FunctionDef {ExprIntrp_DefineFunction();} ASSIGNOP GenExpr |
130 | ; |
131 | |
132 | DerFunctionId : IDENTIFIER {ExprIntrp_StartDerivate();} DERIVATE {ExprIntrp_EndDerivate();} |
133 | ; |
134 | |
135 | DiffFuncId : DIFFERENTIAL DiffId DIVIDEOP DIFFERENTIAL IDENTIFIER {ExprIntrp_DiffVar();} |
136 | | DIFFERENTIAL VALUE {ExprIntrp_DiffDegree();} DiffId DIVIDEOP DIFFERENTIAL VALUE {ExprIntrp_VerDiffDegree();} IDENTIFIER {ExprIntrp_DiffDegreeVar();} |
137 | ; |
138 | |
139 | DiffId : IDENTIFIER {ExprIntrp_StartDifferential();} |
140 | | DiffFuncId |
141 | ; |
142 | |
143 | FunctionDef : IDENTIFIER {ExprIntrp_StartFunction();} BRACKET ListArg ENDBRACKET |
144 | ; |
145 | |
146 | ListArg : unarg {ExprIntrp_EndFuncArg();} |
147 | | unarg COMMA {ExprIntrp_NextFuncArg();} ListArg |
148 | ; |
149 | |
150 | unarg : IDENTIFIER {ExprIntrp_VariableIdentifier();} |
151 | ; |
152 | |
153 | Derivation : 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 | |
157 | ConstantDefinition : CONSTKEY BRACKET IDENTIFIER {ExprIntrp_ConstantIdentifier();} COMMA VALUE {ExprIntrp_ConstantDefinition();} ENDBRACKET |
158 | ; |
159 | |
160 | Sumator : SUMKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_VariableIdentifier();} COMMA GenExpr COMMA GenExpr COMMA VALUE {ExprIntrp_NumValue();} ENDBRACKET {ExprIntrp_Sumator();} |
161 | ; |
162 | |
163 | Productor : PRODKEY BRACKET GenExpr COMMA IDENTIFIER {ExprIntrp_VariableIdentifier();} COMMA GenExpr COMMA GenExpr COMMA VALUE {ExprIntrp_NumValue();} ENDBRACKET {ExprIntrp_Productor();} |
164 | ; |
165 | |
166 | RelationList : SingleRelation |
167 | | SingleRelation RELSEPARATOR RelationList |
168 | | SingleRelation '\n' RelationList |
169 | ; |
170 | |
171 | SingleRelation : GenExpr EQUALOP GenExpr {ExprIntrp_EndOfEqual();} |
172 | ; |
173 | |