int NFA::match(std::string s) const {
std::vector<int> states = fStartStates; for (size_t i = 0; i < s.size(); ++i) {
std::vector<int> next; for (int id : states) { if (fStates[id].accept(s[i])) { for (int nextId : fStates[id].fNext) { if (fStates[nextId].fKind != NFAState::kRemapped_Kind) {
next.push_back(nextId);
} else {
next.insert(next.end(), fStates[nextId].fData.begin(),
fStates[nextId].fData.end());
}
}
}
} if (!next.size()) { return INVALID;
}
states = next;
} int accept = INVALID; for (int id : states) { if (fStates[id].fKind == NFAState::kAccept_Kind) { int result = fStates[id].fData[0]; if (accept == INVALID || result < accept) {
accept = result;
}
}
} return accept;
}
Messung V0.5
¤ Dauer der Verarbeitung: 0.1 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.