analisador léxico parte ii - inf.ufes.brmberger/disciplinas/2015_2/compiladores/... · números...

Post on 13-Feb-2019

215 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Analisador

Léxico – parte II

Compiladores

Mariella Berger

Sumário

• Definições Regulares

• Gerador de Analisador Léxico

• Flex

• Exemplos

SÍNTESE

ANÁLISE

As fases de um Compilador

Análise Léxica

Análise Sintática

Análise Semântica

Gerador de Código Intermediário

Otimizador de Código

Gerador de Código

Analisador Léxico

• O analisador léxico lê o programa fonte (caractere por caractere) e retorna os tokens formadores deste;

• Um token descreve um padrão de caracteres tendo algum significado no programa fonte:

• Identificadores

• Operadores

• Palavras chave

• Números

• Delimitadores, etc

Análise Léxica

montante := deposito_inicial + 60;

montante Identificador

:= Símbolo de atribuição

deposito_inicial Identificador

+ Símbolo de adição

60 Número

; Símbolo ponto e vírgula

Exemplo de Tokens

Como descrever Tokens

• Expressões regulares

• Em pascal, um identificador é uma letra

seguida por zero ou mais letras ou dígitos

letra ( letra | dígito ) *

Notação de Expressões

Regulares

Exemplos

Exercícios

Defina expressões regulares para:

Números Romanos

Endereços de ips

Placas de carros

Números de telefones celulares no Brasil

Prefixos de rádios FM (102,3 MHz)

Número de matrícula na UFES

URL de páginas Web

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

Geradores de Analisadores

Lexicos

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)

Geradores de Analisadores

Lexicos

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)

Flex

Um programa Flex é constituído de 3 partes:

Seção de Declarações

%%

Regras de Tradução (Produções)

%%

Procedimentos Auxiliares

Exemplo 1

Flex

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++

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).

Exemplo 1

Exemplo 2

Expressoes regulares

[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”

Metacaracteres

Exercicio

1. Escrever um programa que permite contar o

número de ocorrências de uma cadeia de

caracteres;

2. Escrever um programa que dado um texto,

mostra:

1. número de algarismos;

2. número de letras do alfabeto;

3. número de linha de texto;

4. número de espaços ou tabulações (\t);

5. número de caracteres não identificados nos

pontos anteriores;

Exercícios

3. Escrever um programa que permite identificar

números naturais;

Entrada: 123 abc 12.45 s 245 xyz

Saída: 123 12 45 245

4. Escrever um programa que permite identificar

números inteiros (com ou sem sinal);

5. Escrever um programa que permite identificar

números com parte decimal (com ou sem

sinal).

top related