#include "naredba.hpp" #include #include void IspisS::izvrsi() const { cout << _s << endl; } Naredba* IspisS::kopija() const { return new IspisS(*this); } void IspisE::izvrsi() const { cout << _i->vrednost() << endl; } IspisE::~IspisE() { delete _i; } IspisE::IspisE(const IspisE& a) { _i = a._i->kopija(); } IspisE& IspisE::operator=(const IspisE& a) { if (this != &a) { delete _i; _i = a._i->kopija(); } return *this; } Naredba* IspisE::kopija() const { return new IspisE(*this); } void Blok::izvrsi() const { for (unsigned i = 0; i < _v.size(); i++) { _v[i]->izvrsi(); } } Blok::~Blok() { for (unsigned i = 0; i < _v.size(); i++) delete _v[i]; } Blok::Blok(const Blok& b) { for (unsigned i = 0; i < b._v.size(); i++) _v.push_back(b._v[i]->kopija()); } Blok& Blok::operator=(const Blok& b) { if (this != &b) { for (unsigned i = 0; i < _v.size(); i++) delete _v[i]; _v.resize(0); for (unsigned i = 0; i < b._v.size(); i++) _v.push_back(b._v[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(); } Naredba* Dodela::kopija() const { return new Dodela(*this); } 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; } void Unos::izvrsi() const { int tmp; cin >> tmp; tablica_simbola[_ime] = tmp; } Naredba* Unos::kopija() const { return new Unos(*this); } void AkoJeOndaInace::izvrsi() const { if (_uslov->vrednost() != 0) _n1->izvrsi(); else _n2->izvrsi(); } Naredba* AkoJeOndaInace::kopija() const { return new AkoJeOndaInace(*this); } 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; } void Prazna::izvrsi() const { // ovako } Naredba* Prazna::kopija() const { return new Prazna(*this); } void DokJe::izvrsi() const { while (_uslov -> vrednost() != 0) { _n->izvrsi(); } } Naredba* DokJe::kopija() const { return new DokJe(*this); } DokJe::~DokJe() { delete _uslov; delete _n; } DokJe::DokJe(const DokJe& x) { _uslov = x._uslov->kopija(); _n = x._n->kopija(); } DokJe& DokJe::operator=(const DokJe& x) { if (this != &x) { delete _uslov; delete _n; _uslov = x._uslov->kopija(); _n = x._n->kopija(); } return *this; }