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); }
public void UnirAlfabeto(AutomatoFND automato) { foreach (char c in automato.Alfabeto) { if (!this.alfabeto.Contains(c)) { this.alfabeto.Add(c); } } }
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); } }
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); } }