73 const std::string arithmetic_parser_evaluator_program =
74 " var curr_val := 0; "
75 " var prev_val := 0; "
79 " for (var i := 0; i < expression[]; i += 1) "
81 " var c := expression[i : i + 1]; "
85 " curr_val := curr_val * 10 + to_num(c); "
88 " if (is_opr(c) or (i == expression[] - 1)) "
95 " result += prev_val; "
101 " result += prev_val; "
105 " case op == '*' : prev_val * curr_val; "
106 " case op == '/' : prev_val / curr_val; "
114 " result += prev_val; "
116 " println(result, ' = ', expression); "
119 std::string arithmetic_expression;
126 symbol_table_t symbol_table;
127 symbol_table.add_stringvar(
"expression", arithmetic_expression);
128 symbol_table.add_function (
"println" , println );
129 symbol_table.add_function (
"is_digit" , isdigit );
130 symbol_table.add_function (
"is_opr" , isopr );
131 symbol_table.add_function (
"to_num" , tonum );
133 expression_t expression;
134 expression.register_symbol_table(symbol_table);
137 parser.compile(arithmetic_parser_evaluator_program, expression);
144 const std::vector<std::string> arithmetic_expressions =
148 "1 - 2 + 52 / 2 - 81 / 3",
151 for (
const auto& expr : arithmetic_expressions)
153 arithmetic_expression = expr;