33 typedef typename compositor_t::function function_t;
35 compositor_t compositor;
41 symbol_table.add_constants();
42 symbol_table.add_variable(
"x",
x);
43 symbol_table.add_variable(
"y",y);
47 function_t(
"f",
"sin(x / pi)",
"x"));
51 function_t(
"g",
"3*[f(x) + f(y)]",
"x",
"y"));
53 std::string expression_string =
"g(1 + f(x), f(y) / 2)";
60 if (!
parser.compile(expression_string,expression))
62 printf(
"Error: %s\tExpression: %s\n",
64 expression_string.c_str());
66 for (std::size_t i = 0; i <
parser.error_count(); ++i)
70 printf(
"Error: %02d Position: %02d Type: [%14s] Msg: %s\tExpression: %s\n",
71 static_cast<unsigned int>(i),
72 static_cast<unsigned int>(
error.token.position),
74 error.diagnostic.c_str(),
75 expression_string.c_str());
81 T result = expression.value();
83 printf(
"%s = %e\n", expression_string.c_str(), result);