private void ConfigurarTransicoes()
    {
        Console.WriteLine("Nessa etapa você deve informar para cada estado o símbolo de entrada e o estado de transição. \nCaso tenha terminado o mapeamento ou não desejas mapear para o estado informado, digite proximo.");
        Dictionary <string, Dictionary <string, string> > transicoes = new Dictionary <string, Dictionary <string, string> >();

        foreach (string estado in Estados)
        {
            Dictionary <string, string> mapaEstado = new Dictionary <string, string>();
            Console.WriteLine($"Para o estado: {estado}, digite o símbolo de entrada com o estado de transição separado por vírgula.\n Após aperte enter. Ex: Letra,estado");
            string mapeamento = "";
            do
            {
                mapeamento = Console.ReadLine();
                if (!mapeamento.Contains(","))
                {
                    Console.WriteLine("Entrada não está no formato especificado.");
                    continue;
                }

                string[] vetorLeitura = mapeamento.Split(",");
                if (!Alfabeto.Contains(vetorLeitura[0]) || !Estados.Contains(vetorLeitura[1]))
                {
                    Console.WriteLine("Entrada não está no alfabeto cadastrado ou estado informado não foi cadastrado previamente. Verfique e tente novamente.");
                    continue;
                }

                mapaEstado.Add(vetorLeitura[0], vetorLeitura[1]);
            } while (!mapeamento.Equals("proximo"));
            transicoes.Add(estado, mapaEstado);
        }
        Transicoes = transicoes;
    }
Ejemplo n.º 2
0
        public void GerarPalavraAPartirDaSequencia()
        {
            string Resultado = string.Empty;

            for (int i = 0; i < Sequencia.Count; i++)
            {
                if (i == 0)
                {
                    Resultado = Inicial;
                }

                var seq = Sequencia[i];

                var regra = RegrasDeProducao.Where(x => x.Indice == seq).FirstOrDefault();

                Resultado = SubstituirPrimeiraOcorrencia(Resultado, regra.De, regra.Para);
            }

            var LetrasDoResultado = Resultado.ToCharArray().ToList();

            foreach (var LetraResultado in LetrasDoResultado)
            {
                if (!Alfabeto.Contains(LetraResultado.ToString()))
                {
                    Erro = $"O resultado da linguagem gerada não pertence ao alfabeto. Alfabeto: {string.Join(", ", Alfabeto)} | Resultado: {Resultado}";
                    return;
                }
            }

            Resposta = Resultado;
        }
Ejemplo n.º 3
0
 public void AgregarEstado(Estado estado)
 {
     foreach (var transicion in estado.Transiciones)
     {
         if (AlfabetoAutomatico)
         {
             Alfabeto.Add(transicion.Key);
         }
         else if (!Alfabeto.Contains(transicion.Key))
         {
             throw new TransitionNotInAlphabetException();
         }
     }
     Estados.Add(estado);
     estado.AutomataPadre = this;
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Recebe dados do arquivo e transforma em Objetos
 /// </summary>
 /// <param name="file"></param>
 private void RecebeDados(string[] file)
 {
     nEstados    = file[0].Split(' ').Count();
     ListEstados = file[0].Split(' ').ToList();
     Alfabeto    = file[1].ToLower().Split(' ').ToList();
     if (Alfabeto.Contains("d"))
     {
         Alfabeto = AlteraAlfabeto(Alfabeto);
     }
     Iestado = file[2].ToUpper();
     Festado = file[3].ToUpper().Split(' ').ToList();
     for (int i = 4; i < file.Length; i++)
     {
         Transicao.Add(file[i].ToLower().Split(' ').ToList());
     }
     //aaaa
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Validação para Inicio do AFD
        /// </summary>
        /// <param name="palavra"></param>
        /// <param name="sistema"></param>
        /// <returns></returns>
        public bool IsValid(string palavra, Sistema sistema)
        {
            //Verifica se a palavra esta de acordo com o alfabet
            if (true)
            {
                int count = 0;
                foreach (var letra in palavra)
                {
                    if (Alfabeto.Contains(letra.ToString()))
                    {
                        count++;
                    }
                }
                if (palavra.Length != count)
                {
                    return(false);
                }
            }
            //Verifica se o estado Inicial e Final esta na lista de estados
            if (true)
            {
                if (!ListEstados.Contains(Iestado))
                {
                    return(false);
                }

                int count = (Festado.Where(item => ListEstados.Contains(item))).Count();
                if (count != Festado.Count)
                {
                    return(false);
                }
            }
            //Verifica se o valor das transições esta no alfabeto
            if (true)
            {
                foreach (var item in ListaTransicao)
                {
                    if (!Alfabeto.Contains(item.NextItem))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }