#include"regexp.h" #include using std::vector; void __reachable(State * s, vector& v) { if (!s || s->visited) return; v.push_back(s); s->visited=true; if (s->isSplit()) { __reachable(s->next, v); __reachable(s->alt, v); } } vector reachable(const vector& list) { vector v; for (int i=0; ivisited=false; return v; } bool runNFA(NFA nfa, char * exp) { int pos=0; vector list1; vector list2; list1.push_back(nfa.in); list1=reachable(list1); while (*exp!='\0') { for (int i=0; ic==*exp || list1[i]->c=='!') { //! is wild card list2.push_back(list1[i]->next); if (list1[i]->alt) list2.push_back(list1[i]->alt); } list1=reachable(list2); //new list //for (int i=0; iisAccept()) // pos is the end of a match list2=vector(); //empty exp++; pos++; } for (int i=0; iisAccept()) return true; return false; }