210 likes | 422 Views
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 : alexandrecordel@gmail.com greinaldo@fbv.edu.br
E N D
Analisador Léxico Prof. AlexandreMonteiro Baseadoem material cedidopelo Prof. EuclidesArcoverde Recife
Contatos • Prof. Guilherme Alexandre Monteiro Reinaldo • Apelido: Alexandre Cordel • E-mail/gtalk: alexandrecordel@gmail.com greinaldo@fbv.edu.br • Site: http://www.alexandrecordel.com.br/fbv • Celular: (81) 9801-1878
Análise Léxica Análise Sintática Analise Semântica Geração de Código Intermediário Geração de Código Final Etapas da Compilação Front-End (Análise) Back-End (Síntese)
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
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
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]+
Exemplos de Geradores • Para C • Lex e Flex • Para Java • JLex e JFlex • Para C# • C# Lex, C# Flex
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
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 olexer.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
Linguagem SQL • Faremos a implementação de uma instrução SQL select * from tabela where id = 20 orderby id;
Tokens • Agora criem a classe enumTokens, 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 “publicStringlexeme;”
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.
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)