#ifndef __NAREDBA_HPP__ #define __NAREDBA_HPP__ 1 #include "izraz.hpp" #include #include using namespace std; class Naredba { public: virtual void izvrsi() const = 0; virtual Naredba* kopija() const = 0; virtual void nazubi(int t) const = 0; virtual ~Naredba() { } }; class IspisS : public Naredba { public: IspisS(string s) :_s(s) {} void izvrsi() const; Naredba* kopija() const; void nazubi(int t) const; private: string _s; }; class IspisE : public Naredba { public: IspisE(Izraz *i) :_i(i->kopija()) {} void izvrsi() const; ~IspisE(); IspisE(const IspisE& x); IspisE& operator=(const IspisE& x); Naredba* kopija() const; void nazubi(int t) const; private: Izraz *_i; }; class Blok : public Naredba { public: Blok(vector v) { for(unsigned i = 0; i < v.size(); i++) _niz.push_back(v[i]->kopija()); } Naredba* kopija() const; void izvrsi() const; void nazubi(int t) const; ~Blok(); Blok(const Blok& x); Blok& operator=(const Blok& x); private: vector _niz; }; class Dodela : public Naredba { public: Dodela(string s, Izraz *i) :_ime(s), _i(i->kopija()) {} Naredba* kopija() const; void izvrsi() const; void nazubi(int t) const; ~Dodela(); Dodela(const Dodela& x); Dodela& operator=(const Dodela& x); private: string _ime; Izraz *_i; }; class Unos : public Naredba { public: Unos(string s) :_ime(s) {} Naredba* kopija() const; void izvrsi() const; void nazubi(int t) const; private: string _ime; }; class AkoJeOndaInace : public Naredba { public: AkoJeOndaInace(Izraz *i, Naredba *n1, Naredba *n2) :_uslov(i->kopija()), _n1(n1->kopija()), _n2(n2->kopija()) {} Naredba* kopija() const; void izvrsi() const; void nazubi(int t) const; ~AkoJeOndaInace(); AkoJeOndaInace(const AkoJeOndaInace& x); AkoJeOndaInace& operator=(const AkoJeOndaInace& x); private: Izraz *_uslov; Naredba *_n1; Naredba *_n2; }; class AkoJeOnda : public Naredba { public: AkoJeOnda(Izraz *i, Naredba *n1) :_uslov(i->kopija()), _n1(n1->kopija()) {} Naredba* kopija() const; void izvrsi() const; void nazubi(int t) const; ~AkoJeOnda(); AkoJeOnda(const AkoJeOnda& x); AkoJeOnda& operator=(const AkoJeOnda& x); private: Izraz *_uslov; Naredba *_n1; }; class DokJe : public Naredba { public: DokJe(Izraz *i, Naredba *n1) :_uslov(i->kopija()), _n1(n1->kopija()) {} Naredba* kopija() const; void izvrsi() const; void nazubi(int t) const; ~DokJe(); DokJe(const DokJe& x); DokJe& operator=(const DokJe& x); private: Izraz *_uslov; Naredba *_n1; }; class Prazna : public Naredba { public: Naredba* kopija() const; void izvrsi() const; void nazubi(int t) const; }; #endif