linguagens e programação flex - dei.isep.ipp.ptproenca/dump/lprog/pptflex.pdf · lexema: 100....

15
Linguagens e Programação FLEX Paulo Proença – [email protected]

Upload: duongdiep

Post on 30-Nov-2018

262 views

Category:

Documents


2 download

TRANSCRIPT

Linguagens e Programação

FLEXPaulo Proença – [email protected]

LPROG

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.

Os tokens são instanciados por lexemas

24 de fevereiro de 2015Paulo Proença – [email protected]

LPROG

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.

24 de fevereiro de 2015Paulo Proença – [email protected]

LPROG

IF LPAREN ID GEQ ID RPAREN LBRACK

Analisador léxico

Exemplo:

24 de fevereiro de 2015Paulo Proença – [email protected]

if(x>=y){y=100;

}

ID ASSIGN INT SCOLON RBRACK

lexema: 100

LPROG

FLEX

Ferramenta que permite gerar analisadores léxicos.

24 de fevereiro de 2015Paulo Proença – [email protected]

LPROG

Flex

Formato de um ficheiro FLEX

24 de fevereiro de 2015Paulo Proença – [email protected]

%{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

lara

çõ

es

Ma

cro

sR

eg

ras

Ro

tin

as

em

C

LPROG

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

Acesso via putty

24 de fevereiro de 2015Paulo Proença – [email protected]

LPROG

Flex

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

Compilação do analisador léxico

24 de fevereiro de 2015Paulo Proença – [email protected]

>> flex ficheiro.flex

>> flex –oficheiro.c ficheiro.flex

Produz: ficheiro.c

Produz: lex.yy.c

>> gcc ficheiro.c -lfl

>> gcc –oPrograma ficheiro.c -lflProduz:

a.out

Produz: Programa

LPROG

Flex

Execução do analisador léxico

24 de fevereiro de 2015Paulo Proença – [email protected]

>> ./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 caracterEOF – End of File

LPROG

Propostas de Exercícios

1. Escrever um programa que permita contar o número de ocorrências de uma cadeia de caracteres

24 de fevereiro de 2015Paulo Proença – [email protected]

ex1.flex

%{int contador=0;

%}%%ISEP|isep {contador++;}.|\n%%main(){

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

}

LPROG

Propostas de exercícios

1.

24 de fevereiro de 2015Paulo Proença – [email protected]

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

>> ./ProgEx1 <Info.txt

número de ocorrências : 6

LPROG

Propostas de Exercícios

2. Escrever um programa que permita substituir as ocorrências de FEUP por ISEP e de 2007 por 2008

24 de fevereiro de 2015Paulo Proença – [email protected]

ex2.flex

%%

FEUP {printf("ISEP");}2007 {printf("2008");}.|\n {printf("%s",yytext);}

%%main(){

yylex();}

LPROG

Propostas de Exercícios

3. Escrever um programa que permita validar matrículas portuguesas.

24 de fevereiro de 2015Paulo Proença – [email protected]

ex3.flex

ALGAR [0-9]LET [A-Z]

%%

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

main(){

yylex();}

LPROG

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

24 de fevereiro de 2015Paulo Proença – [email protected]

• 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

Linguagens e Programação

FLEXPaulo Proença – [email protected]