/** * Creates a Nondeterministic finite automata from regular expression * @param expression * @param reducer Reducer marks the accepting state with unique identifier * @param ignoreCase * @return */ @Override public NFA<T> createNFA(Scope<NFAState<T>> scope, String expression, T reducer, Option... options) { Literal literal = new Literal(); NFA<T> nfa = parse(expression, scope, literal, options); if (Option.supports(options, Option.FIXED_ENDER)) { NFA.modifyFixedEnder(nfa); } NFAState<T> last = nfa.getLast(); last.setToken(reducer); if (literal.isLiteral()) { last.changePriority(1); } if (Option.supports(options, Option.ACCEPT_IMMEDIATELY)) { last.setAcceptImmediately(true); } return nfa; } @ParseMethod(start="regexp", features={SingleThread})