#include "reg_izrazi.hpp" #include using namespace std; RegEx::~RegEx() { } string Char::basic() const { char tmp[2]; tmp[0] = _c; tmp[1] = '\0'; return string(tmp); } RegEx* Char::copy() const { return new Char(*this); } BinOp::~BinOp() { delete _left; delete _right; } string Concat::basic() const { return string("(") + _left->basic() + string(")(") + _right->basic() + string(")"); } RegEx* Concat::copy() const { return new Concat(_left->copy(), _right->copy()); } string Disj::basic() const { return string("(") + _left->basic() + string(")|(") + _right->basic() + string(")"); } RegEx* Disj::copy() const { return new Disj(_left->copy(), _right->copy()); } UnOp::~UnOp() { delete _r; } string Iter::basic() const { return string("(") + _r->basic() + string(")*"); } RegEx* Iter::copy() const { return new Iter(_r->copy()); } string Plus::basic() const { return string("(") + _r->basic() + string(")*(") + _r->basic() + string(")"); } RegEx* Plus::copy() const { return new Plus(_r->copy()); } string CharClass::basic() const { string tmp; for (unsigned i = 0; i < _s.size(); i++) { tmp += _s[i]; if (i != _s.size() - 1) tmp += "|"; } return tmp; } RegEx* CharClass::copy() const { return new CharClass(*this); } string QuestionMark::basic() const { return string("(") + _r->basic() + string(")|()"); } RegEx* QuestionMark::copy() const { return new QuestionMark(_r->copy()); } string IterN::basic() const { string tmp; for (int i = 0; i < _n; i++) tmp += string("(") + _r->basic() + string(")"); return tmp; } RegEx* IterN::copy() const { return new IterN(_r->copy(), _n); } extern map definicije; extern void yyerror(string s); string Definition::basic() const { map::iterator tmp = definicije.find(_c); if (tmp == definicije.end()) yyerror("Ne postoji definicija " + _c); return tmp->second->basic(); } RegEx* Definition::copy() const { return new Definition(*this); }