Aula Prática (13/09/2014)
Download
Report
Transcript Aula Prática (13/09/2014)
Analisador Léxico
Prof. Alexandre Monteiro
Baseado em material cedido pelo Prof. Euclides Arcoverde
Recife
‹#›
Contatos
Prof. Guilherme Alexandre Monteiro Reinaldo
Apelido: Alexandre Cordel
E-mail/gtalk: [email protected]
[email protected]
Site: http://www.alexandrecordel.com.br/fbv
Celular: (81) 9801-1878
Etapas da Compilação
Análise Léxica
Análise Sintática
Front-End
(Análise)
Analise Semântica
Geração de Código
Intermediário
Geração de Código
Final
Back-End
(Síntese)
3
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
4
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
5
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]+
6
Exemplos de Geradores
Para C
•Lex e Flex
Para Java
•JLex e JFlex
Para C#
•C# Lex, C# Flex
7
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
8
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”
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
10
Linguagem SQL
Faremos a implementação de uma instrução SQL
select * from tabela where id = 20 order by id;
Tokens
Agora criem a classe enum Tokens, como todos os tokens
especificados no lexer.flex
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:
Lexer.java
Verifiquem a criação da classe “Lexer.java”
Caso haja algum erro declarem a variável
“public String lexeme;”
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.
Ações dos botões
executar()
executar()
...
Trabalho
Realizar as instruções SQL
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)
21