16namespace layer1_foundations {
17namespace expression_parser {
32 std::string &name_of_formula,
33 std::string &formula_text,
34 std::string &managed_variables,
36 std::string ¶meters,
39 int f_v = (verbose_level >= 1);
42 cout <<
"expression_parser_domain::parse_and_evaluate" << endl;
53 cout <<
"expression_parser_domain::parse_and_evaluate Formula " << name_of_formula <<
" is " << formula_text << endl;
54 cout <<
"expression_parser_domain::parse_and_evaluate Managed variables: " << managed_variables << endl;
57 const char *p = managed_variables.c_str();
68 cout <<
"expression_parser_domain::parse_and_evaluate adding managed variable " << var << endl;
81 cout <<
"expression_parser_domain::parse_and_evaluate Managed variables: " << endl;
82 for (i = 0; i < nb_vars; i++) {
89 cout <<
"expression_parser_domain::parse_and_evaluate Starting to parse " << name_of_formula << endl;
91 Parser.parse(tree, formula_text, 0);
94 cout <<
"expression_parser_domain::parse_and_evaluate Parsing " << name_of_formula <<
" finished" << endl;
99 cout <<
"Syntax tree:" << endl;
104 fname.assign(name_of_formula);
108 std::ofstream ost(fname);
115 cout <<
"expression_parser_domain::parse_and_evaluate before tree->is_homogeneous" << endl;
119 cout <<
"expression_parser_domain::parse_and_evaluate after tree->is_homogeneous" << endl;
123 cout <<
"expression_parser_domain::parse_and_evaluate homogeneous of degree " << degree << endl;
131 cout <<
"expression_parser_domain::parse_and_evaluate before Poly->init" << endl;
139 cout <<
"after Poly->init" << endl;
150 for (i = 0; i < nb_monomials; i++) {
151 cout <<
"expression_parser_domain::parse_and_evaluate Monomial " << i <<
" : ";
159 cout <<
"expression_parser_domain::parse_and_evaluate no subtree" << endl;
167 cout <<
"expression_parser_domain::parse_and_evaluate before evaluate" << endl;
170 const char *p = parameters.c_str();
173 std::map<std::string, std::string> symbol_table;
184 assignment.assign(str);
189 found = assignment.find(
'=');
190 if (found == std::string::npos) {
191 cout <<
"expression_parser_domain::parse_and_evaluate did not find '=' in variable assignment" << endl;
194 std::string symb = assignment.substr (0, found);
195 std::string val = assignment.substr (found + 1, len - found - 1);
200 cout <<
"expression_parser_domain::parse_and_evaluate adding symbol " << symb <<
" = " << val << endl;
203 symbol_table[symb] = val;
211 cout <<
"expression_parser_domain::parse_and_evaluate symbol table:" << endl;
212 for (i = 0; i < symbol_table.size(); i++) {
213 cout << i <<
" : " << symbol_table[i] <<
" = " << values[i] << endl;
220 Values =
NEW_int(nb_monomials);
222 for (i = 0; i < nb_monomials; i++) {
223 cout <<
"expression_parser_domain::parse_and_evaluate Monomial " << i <<
" : ";
226 a = Subtrees[i]->
evaluate(symbol_table, F, verbose_level);
233 cout <<
"expression_parser_domain::parse_and_evaluate no subtree" << endl;
238 cout <<
"expression_parser_domain::parse_and_evaluate evaluated polynomial:" << endl;
239 for (i = 0; i < nb_monomials; i++) {
240 cout << Values[i] <<
" * ";
244 cout <<
"expression_parser_domain::parse_and_evaluate coefficient vector: ";
256 cout <<
"expression_parser_domain::parse_and_evaluate not homogeneous" << endl;
263 cout <<
"expression_parser_domain::parse_and_evaluate before evaluate" << endl;
266 const char *p = parameters.c_str();
269 std::map<std::string, std::string> symbol_table;
280 assignment.assign(str);
285 found = assignment.find(
'=');
286 if (found == std::string::npos) {
287 cout <<
"expression_parser_domain::parse_and_evaluate did not find '=' in variable assignment" << endl;
290 std::string symb = assignment.substr (0, found);
291 std::string val = assignment.substr (found + 1, len - found - 1);
296 cout <<
"expression_parser_domain::parse_and_evaluate adding symbol " << symb <<
" = " << val << endl;
299 symbol_table[symb] = val;
306 cout <<
"expression_parser_domain::parse_and_evaluate symbol table:" << endl;
307 for (i = 0; i < symbol_table.size(); i++) {
308 cout << i <<
" : " << symbol_table[i] <<
" = " << values[i] << endl;
313 a = tree->
Root->
evaluate(symbol_table, F, verbose_level);
315 cout <<
"expression_parser_domain::parse_and_evaluate the formula evaluates to " << a << endl;
324 cout <<
"expression_parser_domain::parse_and_evaluate done" << endl;
330 std::string &formula_label,
331 std::string ¶meters,
334 int f_v = (verbose_level >= 1);
337 cout <<
"expression_parser_domain::evaluate" << endl;
346 cout <<
"could not find symbol " << formula_label << endl;
351 cout <<
"symbol table entry must be of type t_object" << endl;
359 cout <<
"symbol table entry is a collection" << endl;
361 vector<string> *List;
367 Values =
NEW_int(List->size());
369 for (i = 0; i < List->size(); i++) {
374 cout <<
"could not find symbol " << (*List)[i] << endl;
386 cout <<
"The values of the formulae are:" << endl;
387 for (i = 0; i < List->size(); i++) {
388 cout << i <<
" : " << Values[i] << endl;
393 cout <<
"symbol table entry is a formula" << endl;
405 cout <<
"The formula evaluates to " << a << endl;
408 cout <<
"symbol table entry must be either a formula or a collection" << endl;
414 cout <<
"expression_parser_domain::evaluate done" << endl;
421 std::string ¶meters,
424 int f_v = (verbose_level >= 1);
428 cout <<
"expression_parser_domain::evaluate_formula" << endl;
432 cout <<
"expression_parser_domain::evaluate_formula before F->get_subtrees" << endl;
438 cout <<
"expression_parser_domain::evaluate_formula homogeneous of degree " << degree << endl;
445 cout <<
"expression_parser_domain::evaluate_formula before Poly->init" << endl;
453 cout <<
"expression_parser_domain::evaluate_formula after Poly->init" << endl;
464 for (i = 0; i < nb_monomials; i++) {
465 cout <<
"expression_parser_domain::evaluate_formula Monomial " << i <<
" : ";
473 cout <<
"expression_parser_domain::evaluate_formula no subtree" << endl;
477 cout <<
"expression_parser_domain::evaluate_formula before evaluate" << endl;
479 const char *p = parameters.c_str();
482 std::map<std::string, std::string> symbol_table;
493 assignment.assign(str);
498 found = assignment.find(
'=');
499 if (found == std::string::npos) {
500 cout <<
"expression_parser_domain::evaluate_formula did not find '=' in variable assignment" << endl;
503 std::string symb = assignment.substr (0, found);
504 std::string val = assignment.substr (found + 1, len - found - 1);
508 cout <<
"expression_parser_domain::evaluate_formula adding symbol " << symb <<
" = " << val << endl;
510 symbol_table[symb] = val;
517 cout <<
"expression_parser_domain::evaluate_formula symbol table:" << endl;
518 for (i = 0; i < symbol_table.size(); i++) {
519 cout << i <<
" : " << symbol_table[i] <<
" = " << values[i] << endl;
525 Values =
NEW_int(nb_monomials);
527 for (i = 0; i < nb_monomials; i++) {
528 cout <<
"expression_parser_domain::evaluate_formula Monomial " << i <<
" : ";
531 a = Subtrees[i]->
evaluate(symbol_table, Fq, verbose_level);
538 cout <<
"expression_parser_domain::evaluate_formula no subtree" << endl;
542 cout <<
"expression_parser_domain::evaluate_formula evaluated polynomial:" << endl;
543 for (i = 0; i < nb_monomials; i++) {
544 cout << Values[i] <<
" * ";
548 cout <<
"expression_parser_domain::evaluate_formula coefficient vector: ";
557 cout <<
"expression_parser_domain::evaluate_formula not homogeneous" << endl;
560 cout <<
"expression_parser_domain::evaluate_formula before evaluate" << endl;
562 const char *p = parameters.c_str();
565 std::map<std::string, std::string> symbol_table;
576 assignment.assign(str);
581 found = assignment.find(
'=');
582 if (found == std::string::npos) {
583 cout <<
"expression_parser_domain::evaluate_formula did not find '=' in variable assignment" << endl;
586 std::string symb = assignment.substr (0, found);
587 std::string val = assignment.substr (found + 1, len - found - 1);
591 cout <<
"expression_parser_domain::evaluate_formula adding symbol " << symb <<
" = " << val << endl;
593 symbol_table[symb] = val;
600 cout <<
"expression_parser_domain::evaluate_formula symbol table:" << endl;
601 for (i = 0; i < symbol_table.size(); i++) {
602 cout << i <<
" : " << symbol_table[i] <<
" = " << values[i] << endl;
608 cout <<
"expression_parser_domain::evaluate_formula the formula evaluates to " << a << endl;
617 cout <<
"expression_parser_domain::evaluate_formula done" << endl;
~expression_parser_domain()
void parse_and_evaluate(field_theory::finite_field *F, std::string &name_of_formula, std::string &formula_text, std::string &managed_variables, int f_evaluate, std::string ¶meters, int verbose_level)
int evaluate_formula(formula *F, field_theory::finite_field *Fq, std::string ¶meters, int verbose_level)
void evaluate(field_theory::finite_field *Fq, std::string &formula_label, std::string ¶meters, int verbose_level)
expression_parser_domain()
class to parse expressions
interior node in a syntax tree
int evaluate(std::map< std::string, std::string > &symbol_table, field_theory::finite_field *F, int verbose_level)
void export_graphviz(std::string &name, std::ostream &ost)
void print_expression(std::ostream &ost)
the syntax tree of an expression
void split_by_monomials(ring_theory::homogeneous_polynomial_domain *Poly, syntax_tree_node **&Subtrees, int verbose_level)
int is_homogeneous(int °ree, int verbose_level)
std::vector< std::string > managed_variables
int f_has_managed_variables
orbiter_kernel_system::orbiter_symbol_table * Orbiter_symbol_table
int find_symbol(std::string &label)
int find_symbol(std::string &str)
homogeneous polynomials of a given degree in a given number of variables over a finite field GF(q)
void init(field_theory::finite_field *F, int nb_vars, int degree, int f_init_incidence_structure, monomial_ordering_type Monomial_ordering_type, int verbose_level)
void print_monomial(std::ostream &ost, int i)
#define Int_vec_print(A, B, C)
orbiter_kernel_system::orbiter_session * Orbiter
global Orbiter session
the orbiter library for the classification of combinatorial objects