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