public Automata afnSimple(Lista_ER simboloRegex)
        {
            Automata   automataFN = new Automata();
            Estado     begin      = new Estado(0);
            Estado     aceptacion = new Estado(1);
            Trancision transition = new Trancision(begin, aceptacion, simboloRegex);

            begin.Transitions.Add(transition);
            automataFN.States.Add(begin);
            automataFN.States.Add(aceptacion);
            automataFN.Initial = begin;
            automataFN.Acceptance.Add(aceptacion);
            automataFN.Lenguage_R = simboloRegex.getEtiqueta() + "";
            i++;
            return(automataFN);
        }
        private Estado Clench(Estado Actual_state, int begin, Lista_ER symbol, int Name)
        {
            Estado estado;

            if (Actual_state == null)
            {
                estado = new Estado(Name);
                estado.inserted.Add(begin);
                estado.key.Add(begin);
                Table_States.Add(estado);
            }
            else
            {
                estado = Actual_state;
                if (!estado.inserted.Contains(begin))
                {
                    estado.inserted.Add(begin);
                }
            }

            for (int i = 0; i < states.Count; i++)
            {
                if (states.ElementAt(i).Begin.Identifier == begin)
                {
                    //Quizas lleve otra condicion
                    if (states.ElementAt(i).Symbol.getDescripcion().Equals(symbol.getDescripcion()) && states.ElementAt(i).Symbol.getEtiqueta().Equals(symbol.getEtiqueta()))
                    {
                        if (!pending_states.Contains(states.ElementAt(i)))
                        {
                            pending_states.Push(states.ElementAt(i));
                        }
                    }
                }
            }
            while (pending_states.Count > 0)
            {
                Clench(estado, pending_states.Pop().End.Identifier, symbol, estado.Identifier);
            }
            if (!AFD_pendent.Contains(estado))
            {
                AFD_pendent.Enqueue(estado);
            }
            return(estado);
        }
        private Estado Move(Estado state, Lista_ER symbol)
        {
            Estado temporary = new Estado(Table_States.Count + 1);

            for (int i = 0; i < state.inserted.Count; i++)
            {
                for (int j = 0; j < states.Count; j++)
                {
                    if (state.inserted.ElementAt(i) == states.ElementAt(j).Begin.Identifier)
                    {
                        if (states.ElementAt(j).Symbol.getDescripcion().Equals(symbol.getDescripcion()) && states.ElementAt(j).Symbol.getEtiqueta().Equals(symbol.getEtiqueta()))
                        {
                            if (!temporary.inserted.Contains(states.ElementAt(j).End.Identifier))
                            {
                                temporary.inserted.Add(states.ElementAt(j).End.Identifier);
                                temporary.key.Add(states.ElementAt(j).End.Identifier);
                            }
                        }
                    }
                }
            }
            temporary.key.Sort();
            return(temporary);
        }
 public Trancision(Estado begin, Estado end, Lista_ER symbol)
 {
     Begin  = begin;
     End    = end;
     Symbol = symbol;
 }
예제 #5
0
        public void agregar(String etiqueta, String descripcion)
        {
            Lista_ER nuevo = new Lista_ER(etiqueta, descripcion);

            Caracteres.Add(nuevo);
        }