internal Arc(State <TData, TOffset> source, Input input, IEnumerable <Output <TData, TOffset> > output, State <TData, TOffset> target, IEnumerable <TagMapCommand> cmds) { _source = source; Input = input; _outputs = output.ToList().ToReadOnlyList(); Target = target; _priorityType = ArcPriorityType.Medium; Priority = -1; _commands = cmds.ToList(); }
internal override State <TData, TOffset> GenerateNfa(Fst <TData, TOffset> fsa, State <TData, TOffset> startState, out bool hasVariables) { hasVariables = false; ArcPriorityType priorityType = IsGreedy ? ArcPriorityType.High : ArcPriorityType.Low; State <TData, TOffset> endState; State <TData, TOffset> currentState = startState; var startStates = new List <State <TData, TOffset> >(); if (MinOccur == 0) { endState = startState.Arcs.Add(fsa.CreateState(), priorityType); endState = base.GenerateNfa(fsa, endState, out hasVariables); startStates.Add(currentState); } else { endState = startState; for (int i = 0; i < MinOccur; i++) { currentState = endState; endState = base.GenerateNfa(fsa, currentState, out hasVariables); } } if (MaxOccur == Infinite) { endState.Arcs.Add(currentState, priorityType); if (MinOccur == 0) { endState = fsa.CreateState(); } } else { int numCopies = MaxOccur - MinOccur; if (MinOccur == 0) { numCopies--; } for (int i = 1; i <= numCopies; i++) { startStates.Add(endState); endState = endState.Arcs.Add(fsa.CreateState(), priorityType); endState = base.GenerateNfa(fsa, endState, out hasVariables); } } foreach (State <TData, TOffset> state in startStates) { state.Arcs.Add(endState); } return(endState); }
internal Arc(State <TData, TOffset> source, State <TData, TOffset> target, ArcPriorityType priorityType) : this(source, new Input(0), target) { _priorityType = priorityType; }
public State <TData, TOffset> Add(State <TData, TOffset> target, ArcPriorityType priorityType) { CheckFrozen(); return(AddInternal(new Arc <TData, TOffset>(_state, target, priorityType))); }