#include "regex.hpp" #include using namespace std; BinOp::~BinOp() { delete _levi; delete _desni; } UnOp::~UnOp() { delete _r; } void Slovo::basic() const { cout << _c; } void Konkatenacija::basic() const { cout << "("; _levi->basic(); cout << ")("; _desni->basic(); cout << ")"; } void Disjunkcija::basic() const { cout << "("; _levi->basic(); cout << ")|("; _desni->basic(); cout << ")"; } void Klini::basic() const { cout << "("; _r->basic(); cout << ")*"; } void Plus::basic() const { cout << "("; _r->basic(); cout << ")*("; _r->basic(); cout << ")"; } void KarakterskaKlasa::basic() const { for (unsigned i = 0; i < _v.size(); i++) { cout << _v[i]; if (i < _v.size() - 1) cout << "|"; } } #include extern map definicije; void Definicija::basic() const { map::iterator i = definicije.find(_ime); if (i == definicije.end()) throw "Definicija nije zadata"; i->second->basic(); } int Slovo::maxlen() const { return 1; } int Konkatenacija::maxlen() const { int l = _levi->maxlen(); int d = _desni->maxlen(); if (l < 0 || d < 0) return -1; return l + d; } int Disjunkcija::maxlen() const { int l = _levi->maxlen(); int d = _desni->maxlen(); if (l < 0 || d < 0) return -1; return l < d ? d : l; } int Klini::maxlen() const { return -1; } int Plus::maxlen() const { return -1; } int KarakterskaKlasa::maxlen() const { return 1; } int Definicija::maxlen() const { map::iterator i = definicije.find(_ime); if (i == definicije.end()) throw "Definicija nije zadata"; return i->second->maxlen(); }