MCPcopy Create free account
hub / github.com/ArashPartow/exprtk / rpn_example

Function rpn_example

exprtk_simple_example_24.cpp:60–137  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

58
59template <typename T>
60void rpn_example()
61{
62 typedef exprtk::symbol_table<T> symbol_table_t;
63 typedef exprtk::expression<T> expression_t;
64 typedef exprtk::parser<T> parser_t;
65
66 const std::string rpn_program =
67 " var stack[1000] := [0]; "
68 " var stack_size := 0; "
69 " "
70 " for (var i := 0; i < rpn_expression[]; i += 1) "
71 " { "
72 " var c := rpn_expression[i : i + 1]; "
73 " "
74 " if (c == ' ') "
75 " { "
76 " continue; "
77 " } "
78 " else if (is_digit(c)) "
79 " { "
80 " stack[stack_size] := to_num(c); "
81 " stack_size += 1; "
82 " } "
83 " else "
84 " { "
85 " var operator := c; "
86 " var operand1 := stack[stack_size - 2]; "
87 " var operand2 := stack[stack_size - 1]; "
88 " stack_size -= 2; "
89 " "
90 " switch "
91 " { "
92 " case operator == '+' : stack[stack_size] := operand1 + operand2; "
93 " case operator == '-' : stack[stack_size] := operand1 - operand2; "
94 " case operator == '*' : stack[stack_size] := operand1 * operand2; "
95 " case operator == '/' : stack[stack_size] := operand1 / operand2; "
96 " case operator == '^' : stack[stack_size] := operand1 ^ operand2; "
97 " }; "
98 " "
99 " stack_size += 1; "
100 " } "
101 " }; "
102 " "
103 " println(stack[0], ' = ', rpn_expression); "
104 " ";
105
106 std::string rpn_expression;
107
108 char_process<T,is_digit_func<T>> isdigit;
109 char_process<T,to_num_func<T>> tonum;
110 exprtk::rtl::io::println<T> println;
111
112 symbol_table_t symbol_table;
113 symbol_table.add_stringvar("rpn_expression", rpn_expression);
114 symbol_table.add_function ("println" , println );
115 symbol_table.add_function ("is_digit" , isdigit );
116 symbol_table.add_function ("to_num" , tonum );
117

Callers

nothing calls this directly

Calls 1

valueMethod · 0.45

Tested by

no test coverage detected