Class StateTransitionCanonicalizer<SI extends StateIndex<? super S>,S extends AbstractState<S,T>,T extends AbstractTransition<S,T>,TB extends TransitionBuilder<SI,S,T>>

java.lang.Object
com.oracle.truffle.regex.tregex.automaton.StateTransitionCanonicalizer<SI,S,T,TB>
Type Parameters:
TB - represents a DFA transition fragment. This type is used for both intermediate and final results.
Direct Known Subclasses:
ASTTransitionCanonicalizer, DFATransitionCanonicalizer

public abstract class StateTransitionCanonicalizer<SI extends StateIndex<? super S>,S extends AbstractState<S,T>,T extends AbstractTransition<S,T>,TB extends TransitionBuilder<SI,S,T>> extends Object
This class provides an algorithm for converting a list of NFA transitions into a set of DFA transitions.
See Also:
  • Constructor Details

    • StateTransitionCanonicalizer

      public StateTransitionCanonicalizer(SI stateIndex, boolean forward, boolean prioritySensitive)
  • Method Details

    • isPrioritySensitive

      protected boolean isPrioritySensitive()
      If priority-sensitive mode, transition sets are pruned after transitions to final states. Also, target state sets are considered equal iff their order is equal as well.
    • addArgument

      public void addArgument(T transition, CodePointSet charSet)
      Submits an argument to be processed by run(CompilationBuffer).
    • run

      public TB[] run(CompilationBuffer compilationBuffer)
      Runs the NFA to DFA transition conversion algorithm on the NFA transitions given by previous calls to addArgument(AbstractTransition, CodePointSet). This algorithm has two phases:
      1. Merge NFA transitions according to their expected character sets. The result of this phase is a list of TransitionBuilders whose CodePointSets have no more intersections.
      2. Merge TransitionBuilders generated by the first phase if their target state is equal and canMerge(TransitionBuilder, TransitionBuilder) returns true.
      Returns:
      a set of transition builders representing the DFA transitions generated from the given NFA transitions.
    • createTransitionBuilder

      protected abstract TB createTransitionBuilder(T[] transitions, StateSet<SI,S> targetStateSet, CodePointSet matcherBuilder)
    • canMerge

      protected abstract boolean canMerge(TB a, TB b)
      Returns true if two DFA transitions are allowed to be merged into one.
    • createTransitionArray

      protected abstract T[] createTransitionArray(int size)
    • createResultArray

      protected abstract TB[] createResultArray(int size)
      Returns an array suitable for holding the result of run(CompilationBuffer).