00001 #include <typeinfo> 00002 #include "binaryexpression.h" 00003 using namespace std; 00004 00005 Ast& BinaryExpression::operator = (const Ast& ast) { 00006 const BinaryExpression& binaryExpression = dynamic_cast<const BinaryExpression&>(ast); 00007 00008 Expression::operator=(ast); 00009 this->leftExpression = binaryExpression.leftExpression ? dynamic_cast<Expression*>(&(binaryExpression.leftExpression->clone())) : 0; 00010 this->rightExpression = binaryExpression.rightExpression ? dynamic_cast<Expression*>(&(binaryExpression.rightExpression->clone())) : 0; 00011 this->op = binaryExpression.op; 00012 00013 return *(this); 00014 } 00015 00016 bool BinaryExpression::operator == (const Ast& ast) const { 00017 bool result = false; 00018 const BinaryExpression& binaryExpression = dynamic_cast<const BinaryExpression&>(ast); 00019 00020 if (typeid(ast) != typeid(BinaryExpression)) 00021 return false; 00022 00023 if (this->leftExpression && this->rightExpression) 00024 result = (*(this->leftExpression) == *(binaryExpression.leftExpression)) && 00025 (*(this->rightExpression) == *(binaryExpression.rightExpression)); 00026 00027 return result && (this->op == binaryExpression.op) && Expression::operator==(ast); 00028 } 00029