#ifndef __REGEX_HPP__ #define __REGEX_HPP__ 1 #include #include using namespace std; class RegEx { public: virtual string basic() const = 0; virtual ~RegEx(); }; class Slovo : public RegEx { public: Slovo(char c) :_c(c) {} string basic() const; private: char _c; }; class BinOp : public RegEx { public: BinOp(RegEx* l, RegEx* d) :_levi(l), _desni(d) {} ~BinOp(); private: BinOp(const BinOp&); BinOp& operator=(const BinOp&); protected: RegEx *_levi, *_desni; }; class UnOp : public RegEx { public: UnOp(RegEx* l) :_arg(l) {} ~UnOp(); private: UnOp(const UnOp&); UnOp& operator=(const UnOp&); protected: RegEx *_arg; }; class Konkatenacija : public BinOp { public: Konkatenacija(RegEx* l, RegEx* d) :BinOp(l, d) {} string basic() const; }; class Disjunkcija : public BinOp { public: Disjunkcija(RegEx* l, RegEx* d) :BinOp(l, d) {} string basic() const; }; class Klini : public UnOp { public: Klini(RegEx *l) :UnOp(l) {} string basic() const; }; class Plus : public UnOp { public: Plus(RegEx *l) :UnOp(l) {} string basic() const; }; class KarakterskaKlasa : public RegEx { public: KarakterskaKlasa(const vector &v) :_v(v) {} string basic() const; private: vector _v; }; class Upitnik : public UnOp { public: Upitnik(RegEx *l) :UnOp(l) {} string basic() const; }; class VisetrukoPojavljivanje : public UnOp { public: VisetrukoPojavljivanje(RegEx *r, int i) :UnOp(r), _i(i) {} string basic() const; private: int _i; }; #endif