Ejemplo n.º 1
0
 public void SetTransition(string symbols, State state)
 {
     if (state == null || state.Automaton != Automaton)
         throw new ArgumentException("State belongs to another automaton");
     foreach (var symbol in symbols)
         InnerSetTransition(symbol, state);
 }
Ejemplo n.º 2
0
        public Automaton()
        {
            FailedState = new FailedState(this);

            _states.Add(FailedState);
            _initialState = FailedState;
            CurrentState = FailedState;
        }
Ejemplo n.º 3
0
 protected virtual void InnerSetTransition(char symbol, State state)
 {
     transitions[symbol] = state;
 }
Ejemplo n.º 4
0
 public void SetTransition(char symbol, State state)
 {
     if (state == null || state.Automaton != Automaton)
         throw new ArgumentException("State belongs to another automaton");
     InnerSetTransition(symbol, state);
 }
Ejemplo n.º 5
0
 public void AddState(State state)
 {
     if (!_states.Contains(state))
         _states.Add(state);
 }
Ejemplo n.º 6
0
 protected override void InnerSetTransition(char symbol, State state)
 {
     // nothing to do;
 }
Ejemplo n.º 7
0
        private void InitAutomata()
        {
            {
                // pattern ^\d+$
                _automaton1 = new Automaton();
                var initialState = new State("Initial", _automaton1);
                var digitState = new State("Digit", _automaton1);

                initialState.SetTransition("0123456789", digitState);

                digitState.SetTransition("0123456789", digitState);
                digitState.Terminal = true;

                _automaton1.InitialState = initialState;
                _automaton1.AddState(digitState);
            }

            {
                // pattern ^\d*\.\d+$
                _automaton2 = new Automaton();
                var initialState = new State("Initial", _automaton2);
                var dotState = new State("Dot", _automaton2);
                var digitState = new State("Digit", _automaton2);

                initialState.SetTransition("0123456789", initialState);
                initialState.SetTransition(".", dotState);

                dotState.SetTransition("0123456789", digitState);

                digitState.SetTransition("0123456789", digitState);
                digitState.Terminal = true;

                _automaton2.InitialState = initialState;
                _automaton2.AddState(dotState);
                _automaton2.AddState(digitState);
            }

            {
                // pattern ^(\s*)[-+]?\d*\.\d+([eE][+-]?\d+)$
                _automaton3 = new Automaton();

                var initialState = new State("Initial", _automaton3);
                var q1State = new State("q1", _automaton3);
                var q2State = new State("q2", _automaton3);
                var q3State = new State("q3", _automaton3);
                var q4State = new State("q4", _automaton3);
                var q5State = new State("q5", _automaton3);
                var q6State = new State("q6", _automaton3);

                initialState.SetTransition(" \t", initialState);
                initialState.SetTransition("-+0123456789", q1State);
                initialState.SetTransition(".", q2State);

                q1State.SetTransition("0123456789", q1State);
                q1State.SetTransition(".", q2State);

                q2State.SetTransition("0123456789", q3State);

                q3State.SetTransition("0123456789", q3State);
                q3State.SetTransition("eE", q4State);
                q3State.Terminal = true;

                q4State.SetTransition("0123456789", q6State);
                q4State.SetTransition("-+", q5State);

                q5State.SetTransition("0123456789", q6State);

                q6State.SetTransition("0123456789", q6State);
                q6State.Terminal = true;

                _automaton3.InitialState = initialState;
                _automaton3.AddState(q1State);
                _automaton3.AddState(q2State);
                _automaton3.AddState(q3State);
                _automaton3.AddState(q4State);
                _automaton3.AddState(q5State);
                _automaton3.AddState(q6State);
            }
        }