예제 #1
0
        public void Entrada_vazia_retorna_nenhum_token()
        {
            //Arrange
            var analisadorLexico = new AnalisadorLexico(string.Empty);

            //Act
            var tokens = analisadorLexico.Analisar();

            //Assert
            tokens.Should().Equal(new List <Token>());
        }
예제 #2
0
        public void Entrada_Identificador_Invalido()
        {
            //Arrange
            var analisadorLexico = new AnalisadorLexico("13212dasd");

            //Act
            Action analisar = () => analisadorLexico.Analisar();

            //Assert
            analisar.Should().Throw <CompiladorException>()
            .WithMessage("Identificador Inválido: 13212dasd \n Linha: 1");
        }
예제 #3
0
        public void EntradaInvalida()
        {
            //Arrange
            var analisadorLexico = new AnalisadorLexico(Helper.GetExemploIncorretoLalg());

            analisadorLexico.Analisar();
            var analisadorSintatico = new AnalisadorSintatico(analisadorLexico.Tokens);

            //Act
            Action analisar = () => analisadorSintatico.Analisar();

            //Assert
            analisar.Should().Throw <CompiladorException>();
        }
예제 #4
0
        public void EntradaValida()
        {
            //Arrange
            var analisadorLexico = new AnalisadorLexico(Helper.GetExemploCorretoLalg());

            analisadorLexico.Analisar();
            var analisadorSintatico = new AnalisadorSintatico(analisadorLexico.Tokens);

            //Act
            Action analisar = () => analisadorSintatico.Analisar();

            //Assert
            analisar.Should().NotThrow();
        }
예제 #5
0
        public void Entrada_Identificador_Invalido_Linha2()
        {
            //Arrange
            System.IO.File.WriteAllText("entrada.txt", "if numero > 1\n123abc");
            var textoArquivo     = System.IO.File.ReadAllText("entrada.txt");
            var analisadorLexico = new AnalisadorLexico(textoArquivo);

            //Act
            Action analisar = () => analisadorLexico.Analisar();

            //Assert
            analisar.Should().Throw <CompiladorException>()
            .WithMessage("Identificador Inválido: 123abc \n Linha: 2");
        }
예제 #6
0
        public void Entrada_Identificadores_Validos()
        {
            //Arrange
            var analisadorLexico = new AnalisadorLexico("if teste");

            //Act
            var tokens = analisadorLexico.Analisar();

            //Assert
            tokens.Should().Equal(new List <Token>()
            {
                new Token("if", ReservadoIf, 1), new Token("teste", Identificador, 1)
            });
        }
예제 #7
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();
        }