7 ExpressionEvaluator::ExpressionEvaluator():
13 ExpressionEvaluator::ExpressionEvaluator(const ValueMap &v):
19 void ExpressionEvaluator::visit(Literal &literal)
21 if(literal.token=="true")
23 else if(literal.token=="false")
26 result = lexical_cast<float>(literal.token);
30 void ExpressionEvaluator::visit(ParenthesizedExpression &parexp)
32 parexp.expression->visit(*this);
35 void ExpressionEvaluator::visit(VariableReference &var)
42 ValueMap::const_iterator i = variable_values->find(var.declaration);
43 if(i!=variable_values->end())
44 i->second->visit(*this);
46 else if(var.declaration->init_expression)
47 var.declaration->init_expression->visit(*this);
50 void ExpressionEvaluator::visit(UnaryExpression &unary)
53 unary.expression->visit(*this);
63 void ExpressionEvaluator::visit(BinaryExpression &binary)
66 binary.left->visit(*this);
70 float left_result = result;
72 binary.right->visit(*this);
77 result = (left_result<result);
78 else if(binary.oper=="<=")
79 result = (left_result<=result);
80 else if(binary.oper==">")
81 result = (left_result>result);
82 else if(binary.oper==">=")
83 result = (left_result>=result);
84 else if(binary.oper=="==")
85 result = (left_result==result);
86 else if(binary.oper=="!=")
87 result = (left_result!=result);
88 else if(binary.oper=="&&")
89 result = (left_result && result);
90 else if(binary.oper=="||")
91 result = (left_result || result);