#include "regex.hpp" RegEx::~RegEx() { } BinOp::~BinOp() { delete _levi; delete _desni; } UnOp::~UnOp() { delete _arg; } string Slovo::basic() const { char tmp[2]; tmp[0] = _c; tmp[1] = '\0'; return string(tmp); } string Konkatenacija::basic() const { return "(" + _levi->basic() + ")(" + _desni->basic() + ")"; } string Disjunkcija::basic() const { return "(" + _levi->basic() + ")|(" + _desni->basic() + ")"; } string Klini::basic() const { return "(" + _arg->basic() + ")*"; } string Plus::basic() const { string tmp = _arg->basic(); return "(" + tmp + ")*(" + tmp + ")"; } string KarakterskaKlasa::basic() const { string tmp; for (unsigned i = 0; i < _v.size(); i++) { char t[2]; t[0] = _v[i]; t[1] = '\0'; tmp += t; if (i < _v.size() - 1) tmp += "|"; } return tmp; } string Upitnik::basic() const { return "(" + _arg->basic() + ")|()"; } string VisetrukoPojavljivanje::basic() const { string tmp; for (int i = 0; i < _i; i++) tmp += "(" + _arg->basic() + ")"; return tmp; } int Slovo::maxlen() const { return 1; } int Konkatenacija::maxlen() const { int a = _levi->maxlen(); int b = _desni->maxlen(); if (a < 0 || b < 0) return -1; return a + b; } int Disjunkcija::maxlen() const { int a = _levi->maxlen(); int b = _desni->maxlen(); if (a < 0 || b < 0) return -1; return a < b ? b : a; } int Klini::maxlen() const { return -1; } int Plus::maxlen() const { return -1; } int KarakterskaKlasa::maxlen() const { return 1; } int Upitnik::maxlen() const { return _arg->maxlen(); } int VisetrukoPojavljivanje::maxlen() const { int a = _arg->maxlen(); if (a < 0) return a; return a * _i; }