#include "logexpr.h" // IMPLEMENTATION OF LOGICAL EXPRESSIONS and_expression::and_expression(expression* l, expression* r): binary_operator_expression(l,r,2) { } expression* and_expression::clone() const { return new and_expression(*this); } double and_expression::evaluate(double* L) const { return lhs->evaluate(L) > 0 && rhs->evaluate(L) > 0 ? 1 : -1; } void and_expression::print(ostream& os) const { lhs->print(os); os << '&' << '&'; rhs->print(os); } expression* and_expression::simplify() const { expression* nlhs = lhs->simplify(), * nrhs = rhs->simplify(); if (nlhs->simple() && nrhs->simple()) { expression * nexpr = new constant(nlhs->evaluate(0) > 0 && nrhs->evaluate(0) > 0 ? 1 : -1); delete nlhs; delete nrhs; return nexpr; } else return new and_expression(nlhs,nrhs); } or_expression::or_expression(expression* l, expression* r): binary_operator_expression(l,r,1) { } expression* or_expression::clone() const { return new or_expression(*this); } double or_expression::evaluate(double* L) const { return lhs->evaluate(L) > 0 || rhs->evaluate(L) > 0 ? 1 : -1; } void or_expression::print(ostream& os) const { lhs->print(os); os << '|' << '|'; rhs->print(os); } expression* or_expression::simplify() const { expression* nlhs = lhs->simplify(), * nrhs = rhs->simplify(); if (nlhs->simple() && nrhs->simple()) { expression * nexpr = new constant(nlhs->evaluate(0) > 0 || nrhs->evaluate(0) > 0 ? 1 : -1); delete nlhs; delete nrhs; return nexpr; } else return new or_expression(nlhs,nrhs); }