21
1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

Embed Size (px)

Citation preview

Page 1: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

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

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

Page 3: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

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

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

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

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

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

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

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

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

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
Page 13: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

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

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

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

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

Ações dos botões

Page 18: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

executar()

Page 19: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

executar()

...

Page 20: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

Trabalho

Realizar as instruções SQL

Page 21: 1 Analisador Léxico Prof. Alexandre Monteiro Baseado em material cedido pelo Prof. Euclides Arcoverde Recife

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)