コード例 #1
0
        private AutomataState _NextState(AutomataState states, char input)
        {
            AutomataState deststates = new AutomataState();

            foreach (Tuple <int, int> state in states.State)
            {
                Dictionary <char, AutomataState> stateTransitions;
                if (!_transitions.TryGetValue(state, out stateTransitions))
                {
                    continue;
                }

                AutomataState set;
                if (stateTransitions.TryGetValue(input, out set))
                {
                    foreach (var item in set.State)
                    {
                        deststates.Add(item);
                    }
                }

                if (!stateTransitions.TryGetValue(Any, out set))
                {
                    continue;
                }

                foreach (var item in set.State)
                {
                    deststates.Add(item);
                }
            }

            return(_Expand(deststates));
        }
コード例 #2
0
        private AutomataState _Expand(AutomataState states)
        {
            List <Tuple <int, int> > frontier = new List <Tuple <int, int> >();

            frontier.AddRange(states.State);

            while (frontier.Count > 0)
            {
                Tuple <int, int> state = frontier[frontier.Count - 1];
                frontier.RemoveAt(frontier.Count - 1);

                Dictionary <char, AutomataState> set;
                if (_transitions.TryGetValue(state, out set))
                {
                    AutomataState innerSet;
                    if (set.TryGetValue(Epsilon, out innerSet))
                    {
                        IList <Tuple <int, int> > newStates = innerSet.State.Except(states.State).ToList();
                        frontier.AddRange(newStates);
                        foreach (var entry in newStates)
                        {
                            states.Add(entry);
                        }
                    }
                }
            }

            return(states);
        }
コード例 #3
0
 public void AddFinalState(Tuple <int, int> finalState)
 {
     _finalStates.Add(finalState);
 }