compiladores analise lexica
Click here to load reader
-
Upload
marcio-jose -
Category
Documents
-
view
40 -
download
3
Transcript of compiladores analise lexica
![Page 1: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/1.jpg)
Compiladores
ANALISADOR LÉXICO – PARTE II
Prof. Msc. Mariella Bergerhttp://www.inf.ufes.br/~mberger
[email protected]@gmail.com
![Page 2: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/2.jpg)
Sumário
Definições Regulares
Gerador de Analisador Léxico
Flex
Exemplos
![Page 3: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/3.jpg)
Definições Regulares
Os números sem sinal em Pascal são cadeias tais como 5280, 39.37 e 1.87E4.
A seguinte definição regular corresponde a essa classe de cadeias:
– Dígito → 0 | 1 | ...| 9
– dígitos → dígito+ /* um ou mais dígito */
– fração_opcional → (.dígitos)? /* ? 0 ou 1 ocorrência */
– expoente_opcional → (E(+||)?dígitos)?
– Num → digitos fração_opcional expoente_opcional
![Page 4: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/4.jpg)
Geradores de Analisadores Léxicos
O Flex serve para gerar automaticamente programas (em C) fazendo a leitura de uma entrada, de modo a varrer um texto e/ou programa a fim de obter uma sequência de unidades léxicas (tokens).
Os tokens gerados pelos programas criados pelo Flex serão usualmente processados posteriormente por um programa que realizará a analise sintática.
– Entrada: Arquivo de descrição do analisador léxico
– Saída: Programa na linguagem “C” que realiza a análise léxica (default: lex.yy.c)
![Page 5: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/5.jpg)
Geradores de Analisadores Léxicos
O Flex serve para gerar automaticamente programas (em C) fazendo a leitura de uma entrada, de modo a varrer um texto e/ou programa a fim de obter uma sequência de unidades léxicas (tokens).
Os tokens gerados pelos programas criados pelo Flex serão usualmente processados posteriormente por um programa que realizará a analise sintática.
– Entrada: Arquivo de descrição do analisador léxico
– Saída: Programa na linguagem “C” que realiza a análise léxica (default: lex.yy.c)
Outros geradores de analisadores léxicos:
– TPly – TP Lex / Yacc => Gera um programa em PASCAL (scanner em Pascal)
– JavaCC => Para linguagem Java
– Flex++ ou Flexx => Para linguagem C++ (orientado a objetos)
![Page 6: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/6.jpg)
Flex
Um programa Flex é constituído de 3 partes:
Seção de Declarações
%%
Regras de Tradução (Produções)
%%
Procedimentos Auxiliares
![Page 7: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/7.jpg)
Compilando um arquivo Flex
flex -o<arq_saida.c> <arq_def.l>
*.l => Arquivos que contêm as definições das unidades léxicas a serem identificadas. Contém um conjunto de especificações de expressões regulares que serão usadas para reconhecer os tokens.
*.c => Arquivo do programa “C” que implementa o analisador léxico especificado.
Principais opções do FLEX:
– -i => Case Insensitive (ignora diferença entre maiúscula/minúsculas)
– --version => Exibe a versão atual do programa flex em uso
– -+=> Geração de código de saída em C++
![Page 8: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/8.jpg)
Compilando um arquivo Flex
gcc <arq_saida.c> -o <arq_executavel> -lfl
Observações importantes sobre a geração do programa de análise léxica:
– É necessário linkar (-l) uma bibliotec (“lib”) do analisador léxico na compilação do código gerado. O FLEX usa a lib “fl”.
– O programa gerado pode ser executado, onde usualmente a entrada do texto a ser analisado é feita pela “stdin” (teclado).
![Page 9: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/9.jpg)
Exemplo 1
![Page 10: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/10.jpg)
Exemplo 2
![Page 11: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/11.jpg)
Expressões regulares - Flex
[0-9] => Reconhece um dígito
[a-zA-Z] => Reconhece uma letra (comum = sem acentos)
[ \t\n] => Reconhece um espaço em branco ou um tab ou uma nova linha
xxxxx => Reconhece a seqüência de caracteres “xxxxx”
![Page 12: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/12.jpg)
Meta caracteres
![Page 13: compiladores analise lexica](https://reader038.fdocuments.net/reader038/viewer/2022100500/54dc8f764a7959ef358b485f/html5/thumbnails/13.jpg)
Exercícios
Defina as expressões regulares capazes de reconhecer:
– Números Romanos
– Enderećos de ips
– Placas de carros
– Números de telefones no Brasil
– Prefixos de rádios FM (102,3 MHz)
– Número de matrícula na UFES
– URL de páginas Web