#include "naredba.hpp" #include using namespace std; void IspisS::izvrsi() const { cout << _s << endl; } Naredba* IspisS::kopija() const { return new IspisS(*this); } IspisE::~IspisE() { delete _i; } IspisE::IspisE(const IspisE& x) { _i = x._i->kopija(); } IspisE& IspisE::operator=(const IspisE& x) { if (this != &x) { delete _i; _i = x._i->kopija(); } return *this; } void IspisE::izvrsi() const { cout << _i->vrednost() << endl; } Naredba* IspisE::kopija() const { return new IspisE(*this); } void Blok::izvrsi() const { for(unsigned i = 0; i < _niz.size(); i++) _niz[i]->izvrsi(); } Blok::~Blok() { for(unsigned i = 0; i < _niz.size(); i++) delete _niz[i]; } Blok::Blok(const Blok& x) { for(unsigned i = 0; i < x._niz.size(); i++) _niz.push_back(x._niz[i]->kopija()); } Blok& Blok::operator=(const Blok& x) { if (this != &x) { for(unsigned i = 0; i < _niz.size(); i++) delete _niz[i]; _niz.resize(0); for(unsigned i = 0; i < x._niz.size(); i++) _niz.push_back(x._niz[i]->kopija()); } return *this; } Naredba* Blok::kopija() const { return new Blok(*this); } extern map tablica_simbola; void Dodela::izvrsi() const { tablica_simbola[_ime] = _i->vrednost(); } Dodela::~Dodela() { delete _i; } Dodela::Dodela(const Dodela& x) { _ime = x._ime; _i = x._i->kopija(); } Dodela& Dodela::operator=(const Dodela& x) { if (this != &x) { delete _i; _ime = x._ime; _i = x._i->kopija(); } return *this; } Naredba* Dodela::kopija() const { return new Dodela(*this); } Naredba* Unos::kopija() const { return new Unos(*this); } void Unos::izvrsi() const { int tmp; cin >> tmp; tablica_simbola[_ime] = tmp; } void AkoJeOndaInace::izvrsi() const { if (_uslov->vrednost() != 0) _n1->izvrsi(); else _n2->izvrsi(); } AkoJeOndaInace::~AkoJeOndaInace() { delete _uslov; delete _n1; delete _n2; } AkoJeOndaInace::AkoJeOndaInace(const AkoJeOndaInace& x) { _uslov = x._uslov->kopija(); _n1 = x._n1->kopija(); _n2 = x._n2->kopija(); } AkoJeOndaInace& AkoJeOndaInace::operator=(const AkoJeOndaInace& x) { if (this != &x) { delete _uslov; delete _n1; delete _n2; _uslov = x._uslov->kopija(); _n1 = x._n1->kopija(); _n2 = x._n2->kopija(); } return *this; } Naredba* AkoJeOndaInace::kopija() const { return new AkoJeOndaInace(*this); } void AkoJeOnda::izvrsi() const { if (_uslov->vrednost() != 0) _n1->izvrsi(); } AkoJeOnda::~AkoJeOnda() { delete _uslov; delete _n1; } AkoJeOnda::AkoJeOnda(const AkoJeOnda& x) { _uslov = x._uslov->kopija(); _n1 = x._n1->kopija(); } AkoJeOnda& AkoJeOnda::operator=(const AkoJeOnda& x) { if (this != &x) { delete _uslov; delete _n1; _uslov = x._uslov->kopija(); _n1 = x._n1->kopija(); } return *this; } Naredba* AkoJeOnda::kopija() const { return new AkoJeOnda(*this); }