#include "izrazi.hpp" #include #include using namespace std; Izraz::~Izraz() { } int Konstanta::vrednost() const { return _v; } Izraz* Konstanta::kopija() const { return new Konstanta(*this); } BinOp::~BinOp() { delete _levi; delete _desni; } BinOp::BinOp(const BinOp& z) { _levi = z._levi->kopija(); _desni = z._desni->kopija(); } BinOp& BinOp::operator=(const BinOp& z) { if (this != &z) { delete _levi; delete _desni; _levi = z._levi->kopija(); _desni = z._desni->kopija(); } return *this; } UnOp::~UnOp() { delete _arg; } UnOp::UnOp(const UnOp& z) { _arg = z._arg->kopija(); } UnOp& UnOp::operator=(const UnOp& z) { if (this != &z) { delete _arg; _arg = z._arg->kopija(); } return *this; } int Zbir::vrednost() const { return _levi->vrednost() + _desni->vrednost(); } Izraz* Zbir::kopija() const { return new Zbir(*this); } int Razlika::vrednost() const { return _levi->vrednost() - _desni->vrednost(); } Izraz* Razlika::kopija() const { return new Razlika(*this); } int Proizvod::vrednost() const { return _levi->vrednost() * _desni->vrednost(); } Izraz* Proizvod::kopija() const { return new Proizvod(*this); } int Kolicnik::vrednost() const { return _levi->vrednost() / _desni->vrednost(); } Izraz* Kolicnik::kopija() const { return new Kolicnik(*this); } int Mod::vrednost() const { return _levi->vrednost() % _desni->vrednost(); } Izraz* Mod::kopija() const { return new Mod(*this); } int Vece::vrednost() const { return _levi->vrednost() > _desni->vrednost(); } Izraz* Vece::kopija() const { return new Vece(*this); } int Manje::vrednost() const { return _levi->vrednost() < _desni->vrednost(); } Izraz* Manje::kopija() const { return new Manje(*this); } extern map tablica; int Promenljiva::vrednost() const { return tablica[_ime]; } int Minus::vrednost() const { return -_arg->vrednost(); } Izraz* Minus::kopija() const { return new Minus(*this); } Izraz* Promenljiva::kopija() const { return new Promenljiva(*this); } void Konstanta::ispisi() const { cout << _v; } void Zbir::ispisi() const { cout << "("; _levi->ispisi(); cout << ") + ("; _desni->ispisi(); cout << ")"; } void Razlika::ispisi() const { cout << "("; _levi->ispisi(); cout << ") - ("; _desni->ispisi(); cout << ")"; } void Proizvod::ispisi() const { cout << "("; _levi->ispisi(); cout << ") * ("; _desni->ispisi(); cout << ")"; } void Kolicnik::ispisi() const { cout << "("; _levi->ispisi(); cout << ") / ("; _desni->ispisi(); cout << ")"; } void Mod::ispisi() const { cout << "("; _levi->ispisi(); cout << ") mod ("; _desni->ispisi(); cout << ")"; } void Vece::ispisi() const { cout << "("; _levi->ispisi(); cout << ") > ("; _desni->ispisi(); cout << ")"; } void Manje::ispisi() const { cout << "("; _levi->ispisi(); cout << ") < ("; _desni->ispisi(); cout << ")"; } void Minus::ispisi() const { cout << " - ("; _arg->ispisi(); cout << ")"; } void Promenljiva::ispisi() const { cout << _ime; }