コード例 #1
0
ファイル: Estado.cs プロジェクト: Herlander929/Regex-
        public void EliminarE(Dictionary <string, Simbolo> Alfabeto)
        {
            //Testa-se o estado atual com cada simbolo do alfabeto
            foreach (Simbolo s in Alfabeto.Values)
            {
                //Encontra todos alcançáveis com movimentos vazios
                foreach (Estado e in getEstadosVazios())
                {
                    if (!s.isVazio)
                    {
                        //Encontra todos estados alcançáveis com esse símbolo
                        foreach (Estado ee in e.getEstadosDestinosRebuilded(s))
                        {
                            //Para cado estado alcaçado verifica-se os vazios e
                            // adiciona na lista como destino do estado this.
                            foreach (Estado eee in ee.getEstadosVazios())
                            {
                                //Adiciona novas transições ou novos estados destino
                                if (!this.Transicoes.ContainsKey(s.simbolo))
                                {
                                    Transicao t = new Transicao(this);
                                    t.Simbolo = s;
                                    t.AddEstadoDest(eee);
                                    this.Transicoes.Add(s.simbolo, t);
                                }
                                else
                                {
                                    this.Transicoes[s.simbolo].AddEstadoDest(eee);
                                }
                            }
                        }
                    }

                    //Se era possível chegar a algun estado final passando por E,
                    // então esse estado deve ser final também.
                    if (e.isFinal)
                    {
                        this.isFinal = true;
                    }
                }
            }
        }