19 #include "symbol_table.hpp" 21 #include "expression.hpp" 48 template <
typename TType>
55 template <
typename TType>
58 std::visit(*
this, node->get_variant());
62 template <
typename TType>
65 std::visit(*
this, sym->get_value_variant());
74 template <
typename TType>
80 template <
typename TType>
83 if (std::find(_scopeStack.begin(), _scopeStack.end(), node->name) != _scopeStack.end()) {
84 mScopedSymbols.insert(node->name);
87 auto sym = _symbols.resolve<TType>(node->name);
92 mIlldefinedSymbols.insert(node->name);
96 template <
typename TType>
99 mFixedSymbols.insert(sym->m_name);
103 template <
typename TType>
106 mDefinedSymbols.insert(sym->m_name);
109 template <
typename TType>
112 dispatch(sym->m_value.get());
121 template <
typename TType>
124 dispatch(node->template get_child<0>());
128 template <
typename TType,
typename UType>
131 dispatch(node->template get_child<0>());
132 dispatch(node->template get_child<1>());
136 template <
typename TType,
typename UType,
typename VType>
137 void traverse(ternary_node<TType, UType, VType>* node)
139 dispatch(node->template get_child<0>());
140 dispatch(node->template get_child<1>());
141 dispatch(node->template get_child<2>());
145 template <
typename TType,
typename UType,
typename VType,
typename WType>
146 void traverse(quaternary_node<TType, UType, VType, WType>* node)
148 dispatch(node->template get_child<0>());
149 dispatch(node->template get_child<1>());
150 dispatch(node->template get_child<2>());
151 dispatch(node->template get_child<3>());
155 template <
typename TType,
typename UType,
typename VType,
typename WType,
typename XType>
156 void traverse(quinary_node<TType, UType, VType, WType, XType>* node)
158 dispatch(node->template get_child<0>());
159 dispatch(node->template get_child<1>());
160 dispatch(node->template get_child<2>());
161 dispatch(node->template get_child<3>());
162 dispatch(node->template get_child<4>());
166 template <
typename TType,
typename UType,
typename VType,
typename WType,
typename XType,
typename YType>
167 void traverse(senary_node<TType, UType, VType, WType, XType, YType>* node)
169 dispatch(node->template get_child<0>());
170 dispatch(node->template get_child<1>());
171 dispatch(node->template get_child<2>());
172 dispatch(node->template get_child<3>());
173 dispatch(node->template get_child<4>());
174 dispatch(node->template get_child<5>());
178 template <
typename TType,
typename UType,
typename VType,
typename WType,
typename XType,
typename YType,
typename ZType>
179 void traverse(septenary_node<TType, UType, VType, WType, XType, YType, ZType>* node)
181 dispatch(node->template get_child<0>());
182 dispatch(node->template get_child<1>());
183 dispatch(node->template get_child<2>());
184 dispatch(node->template get_child<3>());
185 dispatch(node->template get_child<4>());
186 dispatch(node->template get_child<5>());
187 dispatch(node->template get_child<6>());
191 template <
typename TType,
typename UType,
typename VType,
typename WType,
typename XType,
typename YType,
typename ZType,
typename AType>
192 void traverse(octonary_node<TType, UType, VType, WType, XType, YType, ZType, AType>* node)
194 dispatch(node->template get_child<0>());
195 dispatch(node->template get_child<1>());
196 dispatch(node->template get_child<2>());
197 dispatch(node->template get_child<3>());
198 dispatch(node->template get_child<4>());
199 dispatch(node->template get_child<5>());
200 dispatch(node->template get_child<6>());
201 dispatch(node->template get_child<7>());
205 template <
typename TType,
typename UType,
typename VType,
typename WType,
typename XType,
typename YType,
typename ZType,
typename AType,
typename BType>
206 void traverse(novenary_node<TType, UType, VType, WType, XType, YType, ZType, AType, BType>* node)
208 dispatch(node->template get_child<0>());
209 dispatch(node->template get_child<1>());
210 dispatch(node->template get_child<2>());
211 dispatch(node->template get_child<3>());
212 dispatch(node->template get_child<4>());
213 dispatch(node->template get_child<5>());
214 dispatch(node->template get_child<6>());
215 dispatch(node->template get_child<7>());
216 dispatch(node->template get_child<8>());
220 template <
typename TType,
typename UType,
typename VType,
typename WType,
typename XType,
typename YType,
typename ZType,
typename AType,
typename BType,
typename CType,
typename DType>
221 void traverse(undenary_node<TType, UType, VType, WType, XType, YType, ZType, AType, BType, CType, DType>* node)
223 dispatch(node->template get_child<0>());
224 dispatch(node->template get_child<1>());
225 dispatch(node->template get_child<2>());
226 dispatch(node->template get_child<3>());
227 dispatch(node->template get_child<4>());
228 dispatch(node->template get_child<5>());
229 dispatch(node->template get_child<6>());
230 dispatch(node->template get_child<7>());
231 dispatch(node->template get_child<8>());
232 dispatch(node->template get_child<9>());
233 dispatch(node->template get_child<10>());
237 template <
typename TTypes>
240 for (
auto it = node->children.begin(); it != node->children.end(); ++it) {
251 template <
typename TType>
261 void operator()(multiplication_node* node) { traverse(node); }
262 void operator()(exponentiation_node* node) { traverse(node); }
284 void operator()(bounding_func_node* node) { traverse(node); }
286 void operator()(ale::regnormal_node* node) { traverse(node); }
306 void operator()(schroeder_ethanol_p_node* node) { traverse(node); }
307 void operator()(schroeder_ethanol_rhovap_node* node) { traverse(node); }
308 void operator()(schroeder_ethanol_rholiq_node* node) { traverse(node); }
317 void operator()(ext_antoine_psat_node* node) { traverse(node); }
330 void operator()(dippr106_dhvap_node* node) { traverse(node); }
334 void operator()(covar_matern_1_node* node) { traverse(node); }
335 void operator()(covar_matern_3_node* node) { traverse(node); }
336 void operator()(covar_matern_5_node* node) { traverse(node); }
341 template <
typename TType>
344 _scopeStack.push_back(node->name);
346 _scopeStack.pop_back();
350 template <
typename TType>
353 _scopeStack.push_back(node->name);
355 _scopeStack.pop_back();
359 template <
typename TType>
362 _scopeStack.push_back(node->name);
364 _scopeStack.pop_back();
369 void operator()(index_addition_node* node) { traverse(node); }
370 void operator()(index_multiplication_node* node) { traverse(node); }
374 template <
typename TType>
379 template <
typename TType>
384 template <
typename TType>
389 template <
typename TType>
394 template <
typename TType>
405 template <
typename TType>
408 _scopeStack.push_back(node->name);
410 _scopeStack.pop_back();
414 template <
typename TType>
417 _scopeStack.push_back(node->name);
419 _scopeStack.pop_back();
void operator()(schroeder_ethanol_rholiq_node *node)
Definition: symbolFinder.h:308
void operator()(nrtl_dtau_node *node)
Definition: symbolFinder.h:310
std::set< std::string > mDefinedSymbols
Definition: symbolFinder.h:425
std::set< std::string > mFixedSymbols
Definition: symbolFinder.h:427
void operator()(acosh_node *node)
Definition: symbolFinder.h:295
void operator()(greater_equal_node< TType > *node)
Definition: symbolFinder.h:395
void operator()(cos_node *node)
Definition: symbolFinder.h:273
void operator()(min_node *node)
Definition: symbolFinder.h:263
void operator()(conjunction_node *node)
Definition: symbolFinder.h:401
void operator()(multiplication_node *node)
Definition: symbolFinder.h:261
std::set< std::string > mIlldefinedSymbols
Definition: symbolFinder.h:426
void dispatch(value_symbol< TType > *sym)
Definition: symbolFinder.h:63
void traverse(novenary_node< TType, UType, VType, WType, XType, YType, ZType, AType, BType > *node)
Definition: symbolFinder.h:206
void operator()(lmtd_node *node)
Definition: symbolFinder.h:278
void operator()(set_min_node< TType > *node)
Definition: symbolFinder.h:351
void operator()(mid_node *node)
Definition: symbolFinder.h:422
void traverse(nary_node< TTypes > *node)
Definition: symbolFinder.h:238
void operator()(parameter_symbol< TType > *sym)
Definition: symbolFinder.h:97
void operator()(gpdf_node *node)
Definition: symbolFinder.h:339
void operator()(atanh_node *node)
Definition: symbolFinder.h:297
void operator()(wagner_psat_node *node)
Definition: symbolFinder.h:319
void operator()(cost_turton_node *node)
Definition: symbolFinder.h:332
void operator()(greater_node< TType > *node)
Definition: symbolFinder.h:390
void traverse(undenary_node< TType, UType, VType, WType, XType, YType, ZType, AType, BType, CType, DType > *node)
Definition: symbolFinder.h:221
void dispatch(value_node< TType > *node)
Definition: symbolFinder.h:56
void traverse(octonary_node< TType, UType, VType, WType, XType, YType, ZType, AType > *node)
Definition: symbolFinder.h:192
void operator()(exp_node *node)
Definition: symbolFinder.h:268
void operator()(sinh_node *node)
Definition: symbolFinder.h:292
void operator()(schroeder_ethanol_rhovap_node *node)
Definition: symbolFinder.h:307
void operator()(nrtl_gdtau_node *node)
Definition: symbolFinder.h:314
void operator()(neg_node *node)
Definition: symbolFinder.h:302
void operator()(covar_matern_5_node *node)
Definition: symbolFinder.h:336
void operator()(forall_node< TType > *node)
Definition: symbolFinder.h:406
void operator()(asin_node *node)
Definition: symbolFinder.h:272
std::deque< std::string > _scopeStack
Definition: symbolFinder.h:432
void operator()(xabsx_node *node)
Definition: symbolFinder.h:290
void operator()(indicator_set_node< TType > *node)
Definition: symbolFinder.h:415
void operator()(tan_node *node)
Definition: symbolFinder.h:275
void operator()(index_multiplication_node *node)
Definition: symbolFinder.h:370
void operator()(ale::regnormal_node *node)
Definition: symbolFinder.h:286
void dispatch(expression< TType > &expr)
Definition: symbolFinder.h:49
void operator()(covar_matern_3_node *node)
Definition: symbolFinder.h:335
void operator()(nasa9_hig_node *node)
Definition: symbolFinder.h:323
void operator()(dippr106_dhvap_node *node)
Definition: symbolFinder.h:330
void operator()(tanh_node *node)
Definition: symbolFinder.h:293
void traverse(quinary_node< TType, UType, VType, WType, XType > *node)
Definition: symbolFinder.h:156
void operator()(nrtl_dgtau_node *node)
Definition: symbolFinder.h:315
void operator()(watson_dhvap_node *node)
Definition: symbolFinder.h:329
void operator()(xexpax_node *node)
Definition: symbolFinder.h:280
void operator()(covar_sqrexp_node *node)
Definition: symbolFinder.h:337
void operator()(xlogx_node *node)
Definition: symbolFinder.h:288
void operator()(ub_func_node *node)
Definition: symbolFinder.h:283
void operator()(aspen_hig_node *node)
Definition: symbolFinder.h:322
void operator()(norm2_node *node)
Definition: symbolFinder.h:304
void operator()(lb_func_node *node)
Definition: symbolFinder.h:282
void operator()(xexpy_node *node)
Definition: symbolFinder.h:303
void operator()(acoth_node *node)
Definition: symbolFinder.h:298
void traverse(ternary_node< TType, UType, VType > *node)
Definition: symbolFinder.h:137
void operator()(erf_node *node)
Definition: symbolFinder.h:299
void operator()(log_node *node)
Definition: symbolFinder.h:269
void operator()(xlog_sum_node *node)
Definition: symbolFinder.h:266
void operator()(index_addition_node *node)
Definition: symbolFinder.h:369
namespace holding all essentials of MAiNGO
Definition: aleModel.h:31
void operator()(sum_div_node *node)
Definition: symbolFinder.h:265
void operator()(max_node *node)
Definition: symbolFinder.h:264
void operator()(cosh_node *node)
Definition: symbolFinder.h:291
void operator()(equal_node< TType > *node)
Definition: symbolFinder.h:375
void operator()(expression_symbol< TType > *sym)
Definition: symbolFinder.h:110
SymbolFinder(symbol_table &symbols)
Constructor.
Definition: symbolFinder.h:40
void operator()(disjunction_node *node)
Definition: symbolFinder.h:400
void operator()(entry_node< TType > *node)
Definition: symbolFinder.h:252
void operator()(bounding_func_node *node)
Definition: symbolFinder.h:284
void operator()(constant_node< TType > *node)
Definition: symbolFinder.h:75
void operator()(antoine_tsat_node *node)
Definition: symbolFinder.h:327
void operator()(asinh_node *node)
Definition: symbolFinder.h:296
void operator()(parameter_node< TType > *node)
Definition: symbolFinder.h:81
void operator()(schroeder_ethanol_p_node *node)
Definition: symbolFinder.h:306
void operator()(arh_node *node)
Definition: symbolFinder.h:281
void traverse(binary_node< TType, UType > *node)
Definition: symbolFinder.h:129
void traverse(unary_node< TType > *node)
Definition: symbolFinder.h:122
void operator()(nrtl_gtau_node *node)
Definition: symbolFinder.h:313
void operator()(variable_symbol< TType > *sym)
Definition: symbolFinder.h:104
void operator()(nrtl_g_node *node)
Definition: symbolFinder.h:312
void operator()(ext_antoine_psat_node *node)
Definition: symbolFinder.h:317
void operator()(covar_matern_1_node *node)
Definition: symbolFinder.h:334
void operator()(negation_node *node)
Definition: symbolFinder.h:372
std::set< std::string > mScopedSymbols
Definition: symbolFinder.h:428
void operator()(antoine_psat_node *node)
Definition: symbolFinder.h:318
void operator()(nrtl_tau_node *node)
Definition: symbolFinder.h:311
void traverse(septenary_node< TType, UType, VType, WType, XType, YType, ZType > *node)
Definition: symbolFinder.h:179
void operator()(rlmtd_node *node)
Definition: symbolFinder.h:279
symbol_table & _symbols
Definition: symbolFinder.h:431
void operator()(acos_node *node)
Definition: symbolFinder.h:274
void operator()(less_node< TType > *node)
Definition: symbolFinder.h:380
void operator()(abs_node *node)
Definition: symbolFinder.h:289
Visitor for finding all symbols used in an expression.
Definition: symbolFinder.h:33
void operator()(sum_node< TType > *node)
Definition: symbolFinder.h:342
void operator()(sqrt_node *node)
Definition: symbolFinder.h:270
void operator()(sin_node *node)
Definition: symbolFinder.h:271
void operator()(ale::squash_node *node)
Definition: symbolFinder.h:285
void operator()(index_minus_node *node)
Definition: symbolFinder.h:367
void operator()(set_max_node< TType > *node)
Definition: symbolFinder.h:360
void operator()(less_equal_node< TType > *node)
Definition: symbolFinder.h:385
void operator()(pos_node *node)
Definition: symbolFinder.h:301
void operator()(dippr127_hig_node *node)
Definition: symbolFinder.h:325
void traverse(quaternary_node< TType, UType, VType, WType > *node)
Definition: symbolFinder.h:146
void operator()(element_node *node)
Definition: symbolFinder.h:403
void operator()(erfc_node *node)
Definition: symbolFinder.h:300
void operator()(addition_node *node)
Definition: symbolFinder.h:260
void operator()(coth_node *node)
Definition: symbolFinder.h:294
void operator()(inverse_node *node)
Definition: symbolFinder.h:258
void operator()(minus_node *node)
Definition: symbolFinder.h:257
void operator()(dippr107_hig_node *node)
Definition: symbolFinder.h:324
void operator()(ik_cape_psat_node *node)
Definition: symbolFinder.h:320
void operator()(atan_node *node)
Definition: symbolFinder.h:276
void traverse(senary_node< TType, UType, VType, WType, XType, YType > *node)
Definition: symbolFinder.h:167
void operator()(exponentiation_node *node)
Definition: symbolFinder.h:262