private void threadProcessos() { System.IO.StreamWriter streamWriterSaida = new System.IO.StreamWriter(txtArquivoSaida.Text, false, Encoding.UTF8); ServicoGeracaoAutomatoFinito servicoGeracaoAF = new ServicoGeracaoAutomatoFinito(); AutomatoFinito automatoFinito = servicoGeracaoAF.gerarAutomatoFinitoInicial(txtArquivoGramatica.Text); automatoFinito = servicoGeracaoAF.determinizarAutomato(automatoFinito); servicoGeracaoAF.removerMortos(automatoFinito); streamWriterSaida.WriteLine("Autômato finito gerado."); streamWriterSaida.WriteLine(automatoFinito.criaListaSaida()); ServicoAnalisadorLexico servicoAnalisadorLexico = new ServicoAnalisadorLexico(); List <TabelaSimbolos> tokensLidos = new List <TabelaSimbolos>(); List <string> erros = new List <string>(); servicoAnalisadorLexico.analisar(txtArquivoCodigoFonte.Text, automatoFinito, ref tokensLidos, ref erros); streamWriterSaida.WriteLine("Tokens Lidos:\r\n" + String.Join(Environment.NewLine, tokensLidos.Select(token => String.Format("id: {0}, estado: {1}, rotulo: {2}, linha {3}", token.identificador, token.estadoReconhecedor.label, token.rotulo, token.linha)))); streamWriterSaida.WriteLine("Erros:\r\n" + (erros == null || erros.Count == 0 ? "Nenhum." : String.Join(Environment.NewLine, erros))); streamWriterSaida.WriteLine("Análise léxica concluída...\n"); streamWriterSaida.Close(); streamWriterSaida.Dispose(); }
private void threadProcessos() { System.IO.StreamWriter streamWriterSaida = new System.IO.StreamWriter(txtArquivoSaida.Text, false, Encoding.UTF8); ServicoGeracaoAutomatoFinito servicoGeracaoAF = new ServicoGeracaoAutomatoFinito(); AutomatoFinito automatoFinito = servicoGeracaoAF.gerarAutomatoFinitoInicial(txtArquivoGramatica.Text); automatoFinito = servicoGeracaoAF.determinizarAutomato(automatoFinito); servicoGeracaoAF.removerMortos(automatoFinito); streamWriterSaida.WriteLine("Autômato finito gerado."); streamWriterSaida.WriteLine(automatoFinito.criaListaSaida()); ServicoAnalisadorLexico servicoAnalisadorLexico = new ServicoAnalisadorLexico(); List <TabelaSimbolos> tokensLidos = new List <TabelaSimbolos>(); List <string> erros = new List <string>(); servicoAnalisadorLexico.analisar(txtArquivoCodigoFonte.Text, automatoFinito, ref tokensLidos, ref erros); streamWriterSaida.WriteLine("Tokens Lidos:\r\n" + String.Join(Environment.NewLine, tokensLidos.Select(token => String.Format("id: {0}, estado: {1}, rotulo: {2}, linha {3}", token.identificador, token.estadoReconhecedor.label, token.rotulo, token.linha)))); streamWriterSaida.WriteLine("Erros:\r\n" + (erros == null || erros.Count == 0 ? "Nenhum." : String.Join(Environment.NewLine, erros))); streamWriterSaida.WriteLine("Análise léxica concluída...\n"); if (erros != null && erros.Count > 0) { MessageBox.Show("Foram encontrados erros na análise léxica. Verifique o log!"); streamWriterSaida.Close(); streamWriterSaida.Dispose(); return; } ServicoAnalisadorSintatico servicoAnalisadorSintatico = new ServicoAnalisadorSintatico(txtArquivoGoldParser.Text); servicoAnalisadorSintatico.lerSimbolos(); servicoAnalisadorSintatico.lerProducoes(); servicoAnalisadorSintatico.lerTabelaLALR(); List <string> resultadoAnaliseSintatica = servicoAnalisadorSintatico.analisar(tokensLidos); streamWriterSaida.WriteLine(String.Join(Environment.NewLine, resultadoAnaliseSintatica)); streamWriterSaida.Close(); streamWriterSaida.Dispose(); if (resultadoAnaliseSintatica != null && resultadoAnaliseSintatica.Count > 0) { MessageBox.Show("Foram encontrados erros na análise sintática. Verifique o log!"); } else { MessageBox.Show("Análise sintática concluída!"); } }