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);
64 void ExpressionEvaluator::visit(BinaryExpression &binary)
67 binary.left->visit(*this);
71 float left_result = result;
73 binary.right->visit(*this);
78 result = (left_result<result);
79 else if(binary.oper=="<=")
80 result = (left_result<=result);
81 else if(binary.oper==">")
82 result = (left_result>result);
83 else if(binary.oper==">=")
84 result = (left_result>=result);
85 else if(binary.oper=="==")
86 result = (left_result==result);
87 else if(binary.oper=="!=")
88 result = (left_result!=result);
89 else if(binary.oper=="&&")
90 result = (left_result && result);
91 else if(binary.oper=="||")
92 result = (left_result || result);