Linguagens e Programação FLEX. Paulo Proença

15 

Loading.... (view fulltext now)

Loading....

Loading....

Loading....

Loading....

Texto

(1)

Linguagens e Programação

(2)

Analisador léxico

Programa que lê um ficheiro de texto (p.e.

source code) e produz uma sequência de

componentes léxicos (

tokens

)

As sequências de tokens produzidas

serão utilizados pelo analisador sintático (

parser

)

permitem identificar erros léxicos na entrada.

(3)

Analisador léxico

tokens

São padrões de caracteres com um significado

especial num determinado contexto.

São definidos por expressões regulares sobre um

alfabeto.

lexemas

Ocorrências de um

token no âmbito da informação

analisada.

São constituídos pelos carateres da informação que

compõe um

token.

(4)

IF

LPAREN

ID

GEQ

ID

RPAREN

LBRACK

Analisador léxico

Exemplo:

if(x>=y){

y=100;

}

ID

ASSIGN

INT

SCOLON

RBRACK

lexema:

(5)

FLEX

Ferramenta que permite gerar analisadores

(6)

Flex

Formato de um ficheiro FLEX

%{

int contadorNumeros=0;

%}

DIG [0-9]

%%

{DIG}+ {contadorNumeros++;

printf("Número: %s\n",yytext);}

%%

main() {

yylex();

printf("foram encontrados %d números\n", contadorNumeros);

}

Dec

la

ra

ç

õe

s

M

a

c

ros

Re

gra

s

Ro

tinas

e

m

C

(7)

Flex

Ambiente de trabalho

linux

ssh.dei.isep.ipp.pt

,

ssh1.dei.isep.ipp.pt

,

ssh2.dei.isep.ipp.pt

,

ssh3.dei.isep.ipp.pt

(8)

Flex

Geração do código fonte do analisador léxico

Compilação do analisador léxico

>> flex ficheiro.flex

>> flex –oficheiro.c ficheiro.flex

Produz:

ficheiro.c

Produz:

lex.yy.c

>> gcc ficheiro.c -lfl

>> gcc –oPrograma ficheiro.c -lfl

Produz:

a.out

Produz:

(9)

Flex

Execução do analisador léxico

>> ./Programa <ficheiro.txt

>> ./Programa

Xpto quert as sfsfl

Sf skfk flas kn ebs

Sf sfsç mf827 d0e 9

Fkfkh as dh 9d

<Ctrl+D>

Corresponde ao caracter

(10)

Propostas de Exercícios

1.

Escrever um programa que permita contar

o número de ocorrências de uma cadeia de

caracteres

ex1.flex

%{

int contador=0;

%}

%%

ISEP|isep {contador++;}

.|\n

%%

main()

{

yylex();

printf("numero de ocorrências : %d\n",contador);

}

(11)

Propostas de exercícios

1.

>> flex –oex1.c ex1.flex

>> gcc –oProgEx1 ex1.c -lfl

Info.txt

Em 1989, o ISEP é integrado no subsistema de Ensino Superior Politécnico, passando o seu modelo de formação a integrar dois cursos distintos: o bacharelato, com a duração de três anos, e os Cursos de Estudos Superiores Especializados, com a duração de dois anos. Em 1998, no âmbito de uma nova reforma do ensino superior politécnico, o ISEP passa a

ministrar as actuais licenciaturas bietápicas, caracterizadas pela sua estruturação em dois ciclos - o bacharelato com a duração de três anos - o que possibilita a inserção no mercado de trabalho, seguido de um segundo ciclo de dois anos - frequentado essencialmente em regime pós-laboral - para a obtenção da licenciatura.

Em 2006, por força da adesão de Portugal à Declaração de Bolonha, o isep disponibilizará um novo Plano de Estudos, constituído por licenciaturas e mestrados nas diversas áreas da Engenharia, assim iniciando um novo ciclo da sua já longa história.

Em 2008, o Presidente da República Portuguesa, enaltece a qualidade do trabalho desenvolvido no ISEP, durante o Roteiro para a Ciência. A passagem pelo isep constitui a primeira visita oficial de um chefe de Estado português a um instituto politécnico. O ISEP atribui o primeiro grau de mestre pós-Bolonha.

(12)

Propostas de Exercícios

2.

Escrever um programa que permita

substituir as ocorrências de FEUP por ISEP e

de 2007 por 2008

ex2.flex

%%

FEUP

{printf("ISEP");}

2007

{printf("2008");}

.|\n

{printf("%s",yytext);}

%%

main()

{

yylex();

}

(13)

Propostas de Exercícios

3.

Escrever um programa que permita validar

matrículas portuguesas.

ex3.flex

ALGAR

[0-9]

LET

[A-Z]

%%

{ALGAR}{2}-{LET}{2}-{ALGAR}{2} {printf("%s\n",yytext);}

.|\n

%%

main()

(14)

Propostas de Exercícios

4.

Escrever um programa que dado um

ficheiro de texto, mostre:

5.

Escrever um programa que permita

identificar números naturais

6.

Escrever um programa que permita

identificar números inteiros (com e sem

sinal)

7.

Escrever um programa que permita

identificar números com parte decimal

• Número de algarismos

• Número de letras do alfabeto

• Número de linhas de texto

• Número de espaços ou tabulações

• Numero de outros caracteres

(15)

Linguagens e Programação

Imagem

Referências

temas relacionados :