Orbiter 2022
Combinatorial Objects
syntax_tree_node_terminal.cpp
Go to the documentation of this file.
1/*
2 * syntax_tree_node_terminal.cpp
3 *
4 * Created on: Feb 16, 2021
5 * Author: betten
6 */
7
8
9
10#include "foundations.h"
11
12using namespace std;
13
14
15namespace orbiter {
16namespace layer1_foundations {
17namespace expression_parser {
18
19
21{
22 f_int = false;
23 f_double = false;
24 f_text = false;
25 value_int = 0;
26 value_double = 0.;
27 //value_text;
28
29}
30
31
32void syntax_tree_node_terminal::print(std::ostream &ost)
33{
34 ost << "terminal node, ";
35 if (f_int) {
36 ost << "int=" << value_int << std::endl;
37 }
38 else if (f_double) {
39 ost << "double=" << value_double << std::endl;
40 }
41 else if (f_text) {
42 ost << "text=" << value_text << std::endl;
43 }
44}
45
47{
48 if (f_int) {
49 ost << value_int;
50 }
51 else if (f_double) {
52 ost << value_double;
53 }
54 else if (f_text) {
55 ost << value_text;
56 }
57}
58
60{
61 if (f_int) {
62 ost << value_int;
63 }
64 else if (f_double) {
65 ost << value_double;
66 }
67 else if (f_text) {
68 ost << value_text;
69 }
70 else {
71 cout << "syntax_tree_node_terminal::print_graphviz unknown type" << endl;
72 exit(1);
73 }
74
75}
76int syntax_tree_node_terminal::evaluate(std::map<std::string, std::string> &symbol_table,
77 field_theory::finite_field *F, int verbose_level)
78{
79 int f_v = (verbose_level >= 1);
80 int a;
82
83 if (f_v) {
84 cout << "syntax_tree_node_terminal::evaluate" << endl;
85 }
86 if (f_int) {
87 a = value_int;
88 }
89 else if (f_double) {
90 a = value_double;
91 //cout << "syntax_tree_node_terminal::evaluate f_double" << endl;
92 //exit(1);
93 }
94 else if (f_text) {
95 //a = strtoi(value_text);
96 a = ST.strtoi(symbol_table[value_text]);
97 }
98 else {
99 cout << "syntax_tree_node_terminal::evaluate unknown type" << endl;
100 exit(1);
101 }
102
103 if (a < 0) {
104 cout << "syntax_tree_node_terminal::evaluate a < 0" << endl;
105 exit(1);
106 }
107 if (a >= F->q) {
108 cout << "syntax_tree_node_terminal::evaluate a >= F->q" << endl;
109 exit(1);
110 }
111 if (f_v) {
112 cout << "syntax_tree_node_terminal::evaluate done, value = " << a << endl;
113 }
114 return a;
115}
116
117
118
119}}}
120
121
functions related to strings and character arrays
int evaluate(std::map< std::string, std::string > &symbol_table, field_theory::finite_field *F, int verbose_level)
the orbiter library for the classification of combinatorial objects