1 #include <msp/strings/lexicalcast.h>
8 ExpressionEvaluator::ExpressionEvaluator():
14 ExpressionEvaluator::ExpressionEvaluator(const ValueMap &v):
20 void ExpressionEvaluator::visit(Literal &literal)
22 if(literal.token=="true")
24 else if(literal.token=="false")
27 result = lexical_cast<float>(literal.token);
31 void ExpressionEvaluator::visit(ParenthesizedExpression &parexp)
33 parexp.expression->visit(*this);
36 void ExpressionEvaluator::visit(VariableReference &var)
43 ValueMap::const_iterator i = variable_values->find(var.declaration);
44 if(i!=variable_values->end())
45 i->second->visit(*this);
47 else if(var.declaration->init_expression)
48 var.declaration->init_expression->visit(*this);
51 void ExpressionEvaluator::visit(UnaryExpression &unary)
54 unary.expression->visit(*this);
58 if(unary.oper->token[0]=='!')
64 void ExpressionEvaluator::visit(BinaryExpression &binary)
67 binary.left->visit(*this);
71 float left_result = result;
73 binary.right->visit(*this);
77 std::string oper = binary.oper->token;
79 result = (left_result<result);
81 result = (left_result<=result);
83 result = (left_result>result);
85 result = (left_result>=result);
87 result = (left_result==result);
89 result = (left_result!=result);
91 result = (left_result && result);
93 result = (left_result || result);