Ejemplo n.º 1
0
 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();
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
 internal Arc(State <TData, TOffset> source, State <TData, TOffset> target, ArcPriorityType priorityType)
     : this(source, new Input(0), target)
 {
     _priorityType = priorityType;
 }
Ejemplo n.º 4
0
        public State <TData, TOffset> Add(State <TData, TOffset> target, ArcPriorityType priorityType)
        {
            CheckFrozen();

            return(AddInternal(new Arc <TData, TOffset>(_state, target, priorityType)));
        }