示例#1
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;
        }
示例#2
0
        public void Validacoes(bool validaSequencia)
        {
            if (string.IsNullOrEmpty(Inicial))
            {
                Erro = "A letra inicial não pode ser vazia.";
                return;
            }

            if (RegrasDeProducao.Count == 0)
            {
                Erro = "Deve existir ao menos uma regra de produção adicionada.";
                return;
            }

            if (Variaveis.Count == 0)
            {
                Erro = "Deve existir ao menos uma variável adicionada.";
                return;
            }

            bool Exists = Variaveis.Exists(x => x == Inicial);

            if (!Exists)
            {
                Erro = "Letra inicial não existe nas variáveis adiciondas.";
                return;
            }

            var regras = RegrasDeProducao.Where(x => x.De == string.Empty).ToList();

            if (regras.Count > 0)
            {
                Erro = "Nenhuma regra de produção pode se iniciar com vazio.";
                return;
            }

            if (validaSequencia == true)
            {
                if (Sequencia.Count == 0)
                {
                    Erro = "Deve existir ao menos uma sequência adicionada.";
                    return;
                }

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

                if (regra.De != Inicial)
                {
                    Erro = "A primeira regra de produção da sequencia não é compatível com a palavra inicial.";
                    return;
                }
            }
            else
            {
                if (string.IsNullOrEmpty(Resposta))
                {
                    Erro = "A resposta precisa ser adicionada.";
                    return;
                }
            }
        }
示例#3
0
        public List <RegraDeProducao> RecuperarRegrasDeProducaoAPartirDaVariavel(string Variavel)
        {
            var Regras = RegrasDeProducao.Where(x => Variavel.Contains(x.De)).ToList();

            return(Regras);
        }