NFAFactoryCompiler<?> compiler = new NFAFactoryCompiler<>(checkNotNull(pattern)); compiler.compileFactory(); State<?> startState = compiler.getStates().stream().filter(State::isStart).findFirst().orElseThrow( () -> new IllegalStateException("Compiler produced no start state. It is a bug. File a jira."));
private State<T> createLooping(final State<T> sinkState) { if (currentPattern instanceof GroupPattern) { return createLoopingGroupPatternState((GroupPattern) currentPattern, sinkState); final IterativeCondition<T> ignoreCondition = extendWithUntilCondition( getInnerIgnoreCondition(currentPattern), untilCondition, false); final IterativeCondition<T> takeCondition = extendWithUntilCondition( getTakeCondition(currentPattern), untilCondition, true); IterativeCondition<T> proceedCondition = getTrueFunction(); final State<T> loopingState = createState(currentPattern.getName(), State.StateType.Normal); State<T> sinkStateCopy = copy(sinkState); loopingState.addProceed(sinkStateCopy, new RichAndCondition<>(proceedCondition, untilCondition)); originalStateMap.put(sinkState.getName(), sinkStateCopy); ? new RichAndCondition<>(proceedCondition, new RichNotCondition<>(untilCondition)) : proceedCondition); updateWithGreedyCondition(sinkState, getTakeCondition(currentPattern)); } else { loopingState.addProceed(sinkState, proceedCondition); addStopStateToLooping(loopingState); final State<T> ignoreState = createState(currentPattern.getName(), State.StateType.Normal);
final boolean isOptional) { if (currentPattern instanceof GroupPattern) { return createGroupPatternState((GroupPattern) currentPattern, sinkState, proceedState, isOptional); final State<T> singletonState = createState(currentPattern.getName(), State.StateType.Normal); final State<T> sink = copyWithoutTransitiveNots(sinkState); singletonState.addTake(sink, takeCondition); final IterativeCondition<T> proceedCondition = getTrueFunction(); if (isOptional && !headOfGroup(currentPattern)) { if (currentPattern.getQuantifier().hasProperty(Quantifier.QuantifierProperty.GREEDY)) { final IterativeCondition<T> untilCondition = final State<T> ignoreState; if (isOptional) { ignoreState = createState(currentPattern.getName(), State.StateType.Normal); ignoreState.addTake(sink, takeCondition); ignoreState.addIgnore(ignoreCondition); addStopStates(ignoreState); } else { ignoreState = singletonState;
final boolean isOptional) { if (currentPattern instanceof GroupPattern) { return createGroupPatternState((GroupPattern) currentPattern, sinkState, proceedState, isOptional); final State<T> singletonState = createState(currentPattern.getName(), State.StateType.Normal); final State<T> sink = copyWithoutTransitiveNots(sinkState); singletonState.addTake(sink, takeCondition); final IterativeCondition<T> proceedCondition = getTrueFunction(); if (isOptional && !headOfGroup(currentPattern)) { if (currentPattern.getQuantifier().hasProperty(Quantifier.QuantifierProperty.GREEDY)) { final IterativeCondition<T> untilCondition = final State<T> ignoreState; if (isOptional) { ignoreState = createState(currentPattern.getName(), State.StateType.Normal); ignoreState.addTake(sink, takeCondition); ignoreState.addIgnore(ignoreCondition); addStopStates(ignoreState); } else { ignoreState = singletonState;
final List<Tuple2<IterativeCondition<T>, String>> currentNotCondition = getCurrentNotCondition(); final State<T> copyOfSink = createState(sinkState.getName(), sinkState.getStateType()); targetState = copyWithoutTransitiveNots(tStateTransition.getTargetState());
final List<Tuple2<IterativeCondition<T>, String>> currentNotCondition = getCurrentNotCondition(); final State<T> copyOfSink = createState(sinkState.getName(), sinkState.getStateType()); targetState = copyWithoutTransitiveNots(tStateTransition.getTargetState());
private State<T> createLooping(final State<T> sinkState) { if (currentPattern instanceof GroupPattern) { return createLoopingGroupPatternState((GroupPattern) currentPattern, sinkState); final IterativeCondition<T> ignoreCondition = extendWithUntilCondition( getInnerIgnoreCondition(currentPattern), untilCondition, false); final IterativeCondition<T> takeCondition = extendWithUntilCondition( getTakeCondition(currentPattern), untilCondition, true); IterativeCondition<T> proceedCondition = getTrueFunction(); final State<T> loopingState = createState(currentPattern.getName(), State.StateType.Normal); State<T> sinkStateCopy = copy(sinkState); loopingState.addProceed(sinkStateCopy, new AndCondition<>(proceedCondition, untilCondition)); originalStateMap.put(sinkState.getName(), sinkStateCopy); ? new AndCondition<>(proceedCondition, new NotCondition<>(untilCondition)) : proceedCondition); updateWithGreedyCondition(sinkState, getTakeCondition(currentPattern)); } else { loopingState.addProceed(sinkState, proceedCondition); addStopStateToLooping(loopingState); final State<T> ignoreState = createState(currentPattern.getName(), State.StateType.Normal);
final List<Tuple2<IterativeCondition<T>, String>> currentNotCondition = getCurrentNotCondition(); final State<T> copyOfSink = createState(sinkState.getName(), sinkState.getStateType()); targetState = copyWithoutTransitiveNots(tStateTransition.getTargetState());
private State<T> createLooping(final State<T> sinkState) { if (currentPattern instanceof GroupPattern) { return createLoopingGroupPatternState((GroupPattern) currentPattern, sinkState); final IterativeCondition<T> ignoreCondition = extendWithUntilCondition( getInnerIgnoreCondition(currentPattern), untilCondition, false); final IterativeCondition<T> takeCondition = extendWithUntilCondition( getTakeCondition(currentPattern), untilCondition, true); IterativeCondition<T> proceedCondition = getTrueFunction(); final State<T> loopingState = createState(currentPattern.getName(), State.StateType.Normal); State<T> sinkStateCopy = copy(sinkState); loopingState.addProceed(sinkStateCopy, new AndCondition<>(proceedCondition, untilCondition)); originalStateMap.put(sinkState.getName(), sinkStateCopy); ? new AndCondition<>(proceedCondition, new NotCondition<>(untilCondition)) : proceedCondition); updateWithGreedyCondition(sinkState, getTakeCondition(currentPattern)); } else { loopingState.addProceed(sinkState, proceedCondition); addStopStateToLooping(loopingState); final State<T> ignoreState = createState(currentPattern.getName(), State.StateType.Normal);
final boolean isOptional) { if (currentPattern instanceof GroupPattern) { return createGroupPatternState((GroupPattern) currentPattern, sinkState, proceedState, isOptional); final State<T> singletonState = createState(currentPattern.getName(), State.StateType.Normal); final State<T> sink = copyWithoutTransitiveNots(sinkState); singletonState.addTake(sink, takeCondition); final IterativeCondition<T> proceedCondition = getTrueFunction(); if (isOptional && !headOfGroup(currentPattern)) { if (currentPattern.getQuantifier().hasProperty(Quantifier.QuantifierProperty.GREEDY)) { final IterativeCondition<T> untilCondition = final State<T> ignoreState; if (isOptional) { ignoreState = createState(currentPattern.getName(), State.StateType.Normal); ignoreState.addTake(sink, takeCondition); ignoreState.addIgnore(ignoreCondition); addStopStates(ignoreState); } else { ignoreState = singletonState;
stateNameHandler.checkNameUniqueness(currentPattern.getName()); final State<T> notNext = createState(currentPattern.getName(), State.StateType.Normal); final IterativeCondition<T> notCondition = (IterativeCondition<T>) currentPattern.getCondition(); final State<T> stopState = createStopState(notCondition, currentPattern.getName()); } else { stateNameHandler.checkNameUniqueness(currentPattern.getName()); lastSink = convertPattern(lastSink);
private State<T> createTimesState(final State<T> sinkState, final State<T> proceedState, Times times) { State<T> lastSink = sinkState; setCurrentGroupPatternFirstOfLoop(false); final IterativeCondition<T> untilCondition = (IterativeCondition<T>) currentPattern.getUntilCondition(); final IterativeCondition<T> innerIgnoreCondition = extendWithUntilCondition( getInnerIgnoreCondition(currentPattern), untilCondition, false); final IterativeCondition<T> takeCondition = extendWithUntilCondition( getTakeCondition(currentPattern), untilCondition, true); times.getFrom() != times.getTo()) { if (untilCondition != null) { State<T> sinkStateCopy = copy(sinkState); originalStateMap.put(sinkState.getName(), sinkStateCopy); updateWithGreedyCondition(sinkState, takeCondition); lastSink = createSingletonState(lastSink, proceedState, takeCondition, innerIgnoreCondition, true); addStopStateToLooping(lastSink); lastSink = createSingletonState(lastSink, null, takeCondition, innerIgnoreCondition, false); addStopStateToLooping(lastSink); setCurrentGroupPatternFirstOfLoop(true); return createSingletonState( lastSink,
private State<T> createTimesState(final State<T> sinkState, final State<T> proceedState, Times times) { State<T> lastSink = sinkState; setCurrentGroupPatternFirstOfLoop(false); final IterativeCondition<T> untilCondition = (IterativeCondition<T>) currentPattern.getUntilCondition(); final IterativeCondition<T> innerIgnoreCondition = extendWithUntilCondition( getInnerIgnoreCondition(currentPattern), untilCondition, false); final IterativeCondition<T> takeCondition = extendWithUntilCondition( getTakeCondition(currentPattern), untilCondition, true); times.getFrom() != times.getTo()) { if (untilCondition != null) { State<T> sinkStateCopy = copy(sinkState); originalStateMap.put(sinkState.getName(), sinkStateCopy); updateWithGreedyCondition(sinkState, takeCondition); lastSink = createSingletonState(lastSink, proceedState, takeCondition, innerIgnoreCondition, true); addStopStateToLooping(lastSink); lastSink = createSingletonState(lastSink, null, takeCondition, innerIgnoreCondition, false); addStopStateToLooping(lastSink); setCurrentGroupPatternFirstOfLoop(true); return createSingletonState( lastSink,
final State<T> notNext = createState(currentPattern.getName(), State.StateType.Normal); final IterativeCondition<T> notCondition = getTakeCondition(currentPattern); final State<T> stopState = createStopState(notCondition, currentPattern.getName()); lastSink = notNext; } else { lastSink = convertPattern(lastSink);
final State<T> proceedState, final boolean isOptional) { final IterativeCondition<T> proceedCondition = getTrueFunction(); currentGroupPattern = groupPattern; currentPattern = groupPattern.getRawPattern(); lastSink = createMiddleStates(lastSink); lastSink = convertPattern(lastSink); if (isOptional) {
NFAFactoryCompiler<?> compiler = new NFAFactoryCompiler<>(checkNotNull(pattern)); compiler.compileFactory(); State<?> startState = compiler.getStates().stream().filter(State::isStart).findFirst().orElseThrow( () -> new IllegalStateException("Compiler produced no start state. It is a bug. File a jira."));
NFAFactoryCompiler<?> compiler = new NFAFactoryCompiler<>(checkNotNull(pattern)); compiler.compileFactory(); State<?> startState = compiler.getStates().stream().filter(State::isStart).findFirst().orElseThrow( () -> new IllegalStateException("Compiler produced no start state. It is a bug. File a jira."));
final State<T> notNext = createState(currentPattern.getName(), State.StateType.Normal); final IterativeCondition<T> notCondition = getTakeCondition(currentPattern); final State<T> stopState = createStopState(notCondition, currentPattern.getName()); lastSink = notNext; } else { lastSink = convertPattern(lastSink);
final IterativeCondition<T> trueFunction = BooleanConditions.trueFunction(); final State<T> singletonState = createState(currentPattern.getName(), State.StateType.Normal); final State<T> sink = copyWithoutTransitiveNots(sinkState); singletonState.addTake(sink, currentCondition); final State<T> ignoreState; if (isOptional) { ignoreState = createState(currentPattern.getName(), State.StateType.Normal); ignoreState.addTake(sink, currentCondition); ignoreState.addIgnore(ignoreCondition); addStopStates(ignoreState); } else { ignoreState = singletonState;
final State<T> proceedState, final boolean isOptional) { final IterativeCondition<T> proceedCondition = getTrueFunction(); currentGroupPattern = groupPattern; currentPattern = groupPattern.getRawPattern(); lastSink = createMiddleStates(lastSink); lastSink = convertPattern(lastSink); if (isOptional) {