#ifndef __NAREDBE_HPP__ #define __NAREDBE_HPP__ 1 #include #include #include "izrazi.hpp" using namespace std; class Naredba { public: virtual void izvrsi() const = 0; virtual void nazubi(int tabs) const = 0; virtual ~Naredba() { } }; class IspisE : public Naredba { public: IspisE(Izraz *i) :_i(i) {} void izvrsi() const; ~IspisE(); void nazubi(int tabs) const; private: IspisE(const IspisE& i); IspisE& operator=(const IspisE& i); Izraz *_i; }; class IspisS : public Naredba { public: IspisS(string s) :_s(s) {} void izvrsi() const; void nazubi(int tabs) const; private: string _s; }; class Blok : public Naredba { public: Blok(vector v) :_v(v) {} void izvrsi() const; ~Blok(); void nazubi(int tabs) const; private: Blok(const Blok &b); Blok& operator=(const Blok &b); vector _v; }; class Dodela : public Naredba { public: Dodela(string s, Izraz *i) :_s(s), _i(i) {} void izvrsi() const; ~Dodela(); void nazubi(int tabs) const; private: Dodela(const Dodela& d); Dodela& operator=(const Dodela &d); string _s; Izraz *_i; }; class Unos : public Naredba { public: Unos(string s) :_s(s) {} void izvrsi() const; void nazubi(int tabs) const; private: string _s; }; class AkoJeOndaInace : public Naredba { public: AkoJeOndaInace(Izraz *i, Naredba *n1, Naredba *n2) :_i(i), _n1(n1), _n2(n2) {} void izvrsi() const; ~AkoJeOndaInace(); void nazubi(int tabs) const; private: AkoJeOndaInace(const AkoJeOndaInace& d); AkoJeOndaInace& operator=(const AkoJeOndaInace &d); Izraz *_i; Naredba *_n1, *_n2; }; class AkoJeOnda : public Naredba { public: AkoJeOnda(Izraz *i, Naredba *n1) :_i(i), _n1(n1) {} void izvrsi() const; ~AkoJeOnda(); void nazubi(int tabs) const; private: AkoJeOnda(const AkoJeOnda& d); AkoJeOnda& operator=(const AkoJeOnda &d); Izraz *_i; Naredba *_n1; }; class DokJe : public Naredba { public: DokJe(Izraz *i, Naredba *n1) :_i(i), _n1(n1) {} void izvrsi() const; ~DokJe(); void nazubi(int tabs) const; private: DokJe(const DokJe& d); DokJe& operator=(const DokJe &d); Izraz *_i; Naredba *_n1; }; #endif