예제 #1
0
        private void btnLexica_Click(object sender, EventArgs e)
        {
            AnalisadorLexico Al = new AnalisadorLexico();

            if (Al.Validar(txtCodigo.Text, variaveis.ListaVariaveis))
            {
                AnalisadorSintatico Asin = new AnalisadorSintatico();
                if (Asin.Validar(Al))
                {
                    AnalisadorSemantico Asem = new AnalisadorSemantico();
                    if (Asem.Validar(Asin))
                    {
                        dgvCodigo.DataSource = Asem.getCodigoIntermediario();
                        codigo = Asem.Codigo;
                    }
                    else
                    {
                        MessageBox.Show(Asem.MensagemErro);
                    }
                }
                else
                {
                    MessageBox.Show(Asin.MensagemErro);
                }
            }
            else
            {
                MessageBox.Show(Al.MensagemErro);
            }
        }
예제 #2
0
        static void Main(string[] args)
        {
            Level level = Level.EXEC;

            Log.level = Level.EXEC;

            if (!LerArquivo(args))
            {
                Log.println("Erro de leitura do arquivo fonte!", Level.EXEC);
                Console.ReadKey();
                return; //sai do programa
            }

            //ANÁLISE LÉXICA

            AnalisadorLexico analisadorLexico = new AnalisadorLexico(file);

            analisadorLexico.Analisar();
            if (analisadorLexico.TemErros())
            {
                Log.println("Análise Léxica terminada com erro:", Level.DEBUG);
                analisadorLexico.MostraErros();
                Console.ReadKey();
                return;
            }
            else
            {
                Log.println("Análise Léxica terminada com sucesso!", Level.DEBUG);
                if (level == Level.DEBUG)
                {
                    analisadorLexico.MostraTokens();
                }
            }

            //ANÁLISE SINTÁTICA COM GERAÇÃO DE ÁRVORE

            AnalisadorSintaticoGeradorArvore analisadorSintatico = new AnalisadorSintaticoGeradorArvore(analisadorLexico.Tokens);

            analisadorSintatico.Analisar();
            if (analisadorSintatico.TemErros())
            {
                Log.println("Análise Sintática terminada com erro:", Level.DEBUG);
                analisadorSintatico.MostraErros();
                Console.ReadKey();
                return;
            }
            else
            {
                Log.println("Análise Sintática terminada com sucesso!", Level.DEBUG);
                if (level == Level.DEBUG)
                {
                    analisadorLexico.MostraTokens();
                    TabelaSimbolos.MostraSimbolos();
                }
            }

            //analisadorSintatico.MostraArvore();


            AnalisadorSemantico analisadorSemantico = new AnalisadorSemantico(analisadorSintatico.Raiz);

            analisadorSemantico.Analisar();
            if (analisadorSemantico.TemErros())
            {
                Log.println("Análise Semântica terminada com erro:", Level.DEBUG);
                analisadorSemantico.MostraErros();
                Console.ReadKey();
                return;
            }
            else
            {
                Log.println("Análise Semântica terminada com sucesso!", Level.DEBUG);
                if (level == Level.DEBUG)
                {
                    TabelaSimbolos.MostraSimbolos();
                }
            }

            try
            {
                DateTime      inicio        = DateTime.Now;
                Interpretador interpretador = new Interpretador(analisadorSemantico.Raiz, args);
                //interpretador.Memoization = true;
                interpretador.Executar();
                DateTime fim = DateTime.Now;
                Log.println("\n\nExecução encerrada com sucesso! Tempo gasto: " + fim.Subtract(inicio).TotalMilliseconds + " ms", Level.EXEC);
            }
            catch (Exception ex)
            {
                Log.println("Erro na interpretação: " + ex.Message, Level.EXEC);
            }


            Console.ReadKey();
        }