#include "reg_izrazi.hpp" #include using namespace std; RegIzraz::~RegIzraz() { } string Slovo::basic() const { string tmp; tmp += _c; return tmp; } int Slovo::maxlen() const { return 1; } string Slovo::minstr() const { return string("") + _c; } BinOp::~BinOp() { delete _levi; delete _desni; } string Konkatenacija::basic() const { return "(" + _levi->basic() + ")(" + _desni->basic() + ")"; } int Konkatenacija::maxlen() const { int l = _levi->maxlen(); int d = _desni->maxlen(); return (l<0 || d<0)? -1 : l + d; } string Konkatenacija::minstr() const { return _levi->minstr() + _desni->minstr(); } string Disjunkcija::basic() const { return "(" + _levi->basic() + ")|(" + _desni->basic() + ")"; } int Disjunkcija::maxlen() const { int l = _levi->maxlen(); int d = _desni->maxlen(); return (l<0 || d<0)? -1 : max(l, d); } string Disjunkcija::minstr() const { string l = _levi->minstr(); string d = _desni->minstr(); return (l.size() < d.size()) ? l : d; } UnOp::~UnOp() { delete _f; } string Klini::basic() const { return "(" + _f->basic() + ")*"; } int Klini::maxlen() const { return -1; } string Klini::minstr() const { return ""; } string Plus::basic() const { return "(" + _f->basic() + ")*(" + _f->basic() + ")"; } int Plus::maxlen() const { return -1; } string Plus::minstr() const { return _f->minstr(); } string KarakterskaKlasa::basic() const { string tmp; for (unsigned i = 0; i < _s.size(); i++) { tmp += _s[i]; if (i != _s.size() - 1) tmp += "|"; } return tmp; } int KarakterskaKlasa::maxlen() const { return 1; } string KarakterskaKlasa::minstr() const { return string("") + _s[0]; } string Upitnik::basic() const { return "(" + _f->basic() + ")|()"; } int Upitnik::maxlen() const { return _f->maxlen(); } string Upitnik::minstr() const { return ""; } string VisestrukoPojavljivanje::basic() const { string tmp; for (int i = 0; i < _n; i++) tmp += "(" + _f->basic() + ")"; return tmp; } int VisestrukoPojavljivanje::maxlen() const { return _f->maxlen() * _n; } string VisestrukoPojavljivanje::minstr() const { string tmp; for (int i = 0; i < _n; i++) tmp += _f->minstr(); return tmp; } extern map definicije; void yyerror(string s); string Definicija::basic() const { map::iterator tmp = definicije.find(_c); if (tmp == definicije.end()) yyerror(string("Definicija ") + _c + " ne postoji"); return tmp->second->basic(); } int Definicija::maxlen() const { map::iterator tmp = definicije.find(_c); if (tmp == definicije.end()) yyerror(string("Definicija ") + _c + " ne postoji"); return tmp->second->maxlen(); } string Definicija::minstr() const { map::iterator tmp = definicije.find(_c); if (tmp == definicije.end()) yyerror(string("Definicija ") + _c + " ne postoji"); return tmp->second->minstr(); }