NFA RE2NFA::parseBranch() { NFA value = parsePiece(); if (!hasNext()) return value; NFA next; do { next = parsePiece(); if (!next.isEmpty()) value = NFA::createConcatenatingNFA(value, next); } while (!next.isEmpty() && hasNext()); return value; }
NFA RE2NFA::parsePiece() { NFA atom = parseAtom(); if (atom.isEmpty() || !hasNext()) return atom; return parseMaybeQuantifier(atom); }
NFA NFA::createStringNFA(const QByteArray &str) { NFA result; foreach (char c, str) { NFA ch = NFA::createSingleInputNFA(c); if (result.isEmpty()) result = ch; else result = NFA::createConcatenatingNFA(result, ch); }
NFA RE2NFA::parse(const QString &expression, int *errCol) { tokenize(expression); if (symbols.isEmpty()) return NFA(); index = 0; NFA result = parseExpr(); if (result.isEmpty()) { if (errCol) *errCol = errorColumn; } return result; }