#include #include #include "expression.hpp" int main() { // v1, v2, v3 are ValueExpression objects auto v1 = make_value(42); auto v2 = make_value(23); auto v3 = make_value(3.14); std::cout << "v1 = " << *v1->evaluate() << std::endl; std::cout << "expression v1: " << *v1 << std::endl; std::cout << "v2 = " << *v2->evaluate() << std::endl; std::cout << "expression v2: " << *v2 << std::endl; std::cout << "v3 = " << *v3->evaluate() << std::endl; std::cout << "expression v3: " << *v3 << std::endl; auto e1 = make_addition(std::move(v1), std::move(v2)); std::cout << "42 + 23 = " << *e1->evaluate() << std::endl; std::cout << "Expression e1: " << *e1 << std::endl; auto e2 = make_multiplication(std::move(e1), std::move(v3)); std::cout << "(42 + 23) * 3.14 = " << *e2->evaluate() << std::endl; // Print the expression in the prefix notation: * + 42 23 3.14 std::cout << "Expression e2: " << *e2 << std::endl; return 0; }