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; }
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; } } }
public List <RegraDeProducao> RecuperarRegrasDeProducaoAPartirDaVariavel(string Variavel) { var Regras = RegrasDeProducao.Where(x => Variavel.Contains(x.De)).ToList(); return(Regras); }