1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides...
Transcript of 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides...
![Page 1: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/1.jpg)
1
Analisador Léxico
Prof. Alexandre Monteiro
Baseado em material cedido pelo Prof. Euclides Arcoverde
Recife
![Page 2: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/2.jpg)
Contatos
Prof. Guilherme Alexandre Monteiro Reinaldo
Apelido: Alexandre Cordel
E-mail/gtalk: [email protected]
Site: http://www.alexandrecordel.com.br/fbv
Celular: (81) 9801-1878
![Page 3: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/3.jpg)
3
Etapas da Compilação
Front-End(Análise)
Back-End(Síntese)
Análise Léxica
Análise Sintática
Analise Semântica
Geração de CódigoIntermediário
Geração de CódigoFinal
![Page 4: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/4.jpg)
4
Análise Léxica
Objetivo
• Ler os caracteres do código fonte agrupando-os de maneira significativa (em lexemas) e classificando esses agrupamentos (em tokens)
Em outras palavras
• Entrada: sequência de caracteres• Saída: sequência de tokens
![Page 5: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/5.jpg)
5
Saída
Lexema: sequência de caracteres com significado interligado
Token: classificação dada ao lexema
• Geralmente retornado junto com o próprio lexema ou outro atributo, como um ponteiro ou um valor numérico associado
![Page 6: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/6.jpg)
6
Relembrando...
Tokens especificados como expressões regulares:
ABRE_PAR → (
FECHA_PAR → )
ATRIB → =
ADD → +
MULT → *
DEF → def
ID → [_a-z][_a-z0-9]*
NUM_INT → [0-9][0-9]*
PT_VG → ;
WHITESPACE → [ \t\n\r]+
![Page 7: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/7.jpg)
7
Exemplos de Geradores
Para C
• Lex e Flex
Para Java
• JLex e JFlex
Para C#
• C# Lex, C# Flex
![Page 8: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/8.jpg)
8
JFlex É um gerador de analisadores léxicos escrito em Java,
baseado no flex para C• Também é uma melhoria do Jlex• Pode ser encontrado em http://jflex.de/
Constrói o analisador léxico a partir de um arquivo de especificação dado como entrada
• Processo visto nos slides da aula anterior• Recebe arquivo de entrada normalmente com extensão .lex ou
.flex• A partir desse arquivo vai ser gerado um analisador léxico
capaz de reconhecer os caracteres de determinada linguagem
Gera uma classe que faz a análise léxica
![Page 9: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/9.jpg)
Criar Novo Projeto
No IDE criem um novo projeto chamado “Analisador”
Criem um pacote chamado “analisador”
Em seguida, criem uma classe chamada de “Analisador.java”
Por fim, por enquanto, criem um arquivo vazio de nome “Lexer.flex”
![Page 10: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/10.jpg)
10
Especificando o lexer.flex
A especificação é dividida em 3 partes que são separadas por “%%”
Em seu IDE crie um arquivo (Lexer.flex)
Código do usuário %% Opções do JFlex + Declarações de Macros %% Regras léxicas
![Page 11: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/11.jpg)
Linguagem SQL
Faremos a implementação de uma instrução SQL
select * from tabela where id = 20 order by id;
![Page 12: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/12.jpg)
![Page 13: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/13.jpg)
Tokens
Agora criem a classe enum Tokens, como todos os tokens especificados no lexer.flex
![Page 14: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/14.jpg)
Analisador
Voltemos a classe “Analisador.java”
Vamos criar a classe “Lexer.java” a partir da classe “Analisador.java”
Criem os métodos gerarLexer() e o método main(), abaixo:
![Page 15: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/15.jpg)
Lexer.java
Verifiquem a criação da classe “Lexer.java”
Caso haja algum erro declarem a variável “public String lexeme;”
![Page 16: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/16.jpg)
GUI
Vamos desenvolver uma GUI de avaliação do analisador léxico.
Criem um Jframe de nome TelaAnalisador, com os seguintes itens: Label, TextField, Buttons e TextArea.
![Page 17: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/17.jpg)
Ações dos botões
![Page 18: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/18.jpg)
executar()
![Page 19: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/19.jpg)
executar()
...
![Page 20: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/20.jpg)
Trabalho
Realizar as instruções SQL
![Page 21: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife.](https://reader035.fdocument.pub/reader035/viewer/2022081512/552fc16b497959413d8ec517/html5/thumbnails/21.jpg)
21
Bibliografia
AHO, A., LAM, M. S., SETHI, R., ULLMAN, J. D., Compiladores: princípios, técnicas e ferramentas. Ed. Addison Wesley. 2a Edição, 2008 (Capítulo 2)