#include "regexprun.h" #include using std::cout; NFA buildNFA(const char * s) { char ss[1000]; in2post(s,ss); char * t=ss; vector v; while (*t!='\0') { if (*t=='*') { NFA nfa=v[v.size()-1]; v.pop_back(); v.push_back(star(nfa)); } else if (*t=='+') { NFA nfa=v[v.size()-1]; v.pop_back(); v.push_back(plus(nfa)); } else if (*t=='?') { NFA nfa=v[v.size()-1]; v.pop_back(); v.push_back(que(nfa)); } else if (*t=='.') { NFA nfa2=v[v.size()-1]; NFA nfa1=v[v.size()-2]; v.pop_back(); v.pop_back(); v.push_back(dot(nfa1, nfa2)); } else if (*t=='|') { NFA nfa2=v[v.size()-1]; NFA nfa1=v[v.size()-2]; v.pop_back(); v.pop_back(); v.push_back(bar(nfa1, nfa2)); } else v.push_back(sym(*t)); t++; } return accept(v[v.size()-1]); } int main() { //examples NFA nfa=buildNFA("a.(b.b)*.a"); NFA nfa2=buildNFA("a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a?.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a"); cout<