Example #1
0
        public void UnirAutomatos(AutomatoFND automato)
        {
            int offset = this.GetQuantidadeDeEstados();

            UnirMatrizTransicao(automato);

            int novoInicial = this.GetQuantidadeDeEstados();

            this.matrizTransicao.Add(new Dictionary <char, int[]>());

            foreach (int inicial in this.iniciais)
            {
                AdicionarTransicao(novoInicial, (char)955, inicial);
            }
            foreach (int inicial in automato.Iniciais)
            {
                AdicionarTransicao(novoInicial, (char)955, inicial + offset);
            }

            this.matrizTransicao.Add(new Dictionary <char, int[]>());

            foreach (int final in this.finais)
            {
                AdicionarTransicao(final, (char)955, novoInicial + 1);
            }
            foreach (int final in automato.Finais)
            {
                AdicionarTransicao(final + offset, (char)955, novoInicial + 1);
            }

            this.iniciais.Clear();
            this.finais.Clear();
            this.iniciais.Add(novoInicial);
            this.finais.Add(novoInicial + 1);
        }
Example #2
0
 public void UnirAlfabeto(AutomatoFND automato)
 {
     foreach (char c in automato.Alfabeto)
     {
         if (!this.alfabeto.Contains(c))
         {
             this.alfabeto.Add(c);
         }
     }
 }
Example #3
0
        public void ConcatenarAutomatos(AutomatoFND automato)
        {
            int offset = this.GetQuantidadeDeEstados();

            UnirMatrizTransicao(automato);

            foreach (int final in this.finais)
            {
                AdicionarTransicao(final, (char)955, automato.Iniciais[0] + offset);
            }

            finais.Clear();
            foreach (int final in automato.Finais)
            {
                this.finais.Add(final + offset);
            }
        }
Example #4
0
        private void UnirMatrizTransicao(AutomatoFND automato)
        {
            UnirAlfabeto(automato);
            int offset = this.GetQuantidadeDeEstados();

            foreach (var tupla in automato.MatrizDeTransicao)
            {
                Dictionary <char, int[]> auxTupla = new Dictionary <char, int[]>();
                foreach (var parChaveValor in tupla)
                {
                    int[] auxEstados = new int[parChaveValor.Value.Length];
                    for (int i = 0; i < parChaveValor.Value.Length; i++)
                    {
                        auxEstados[i] = parChaveValor.Value[i] + offset;
                    }
                    auxTupla.Add(parChaveValor.Key, auxEstados);
                }
                this.matrizTransicao.Add(auxTupla);
            }
        }