• Nenhum resultado encontrado

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

N/A
N/A
Protected

Academic year: 2021

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

Copied!
15
0
0

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

Referências

Documentos relacionados

a) Doenças pré-existentes ao período de viagem (vigência do seguro) e quaisquer de suas conseqüências, incluindo convalescenças e afecções em tratamentos ainda

nesta nossa modesta obra O sonho e os sonhos analisa- mos o sono e sua importância para o corpo e sobretudo para a alma que, nas horas de repouso da matéria, liberta-se parcialmente

No entanto, maiores lucros com publicidade e um crescimento no uso da plataforma em smartphones e tablets não serão suficientes para o mercado se a maior rede social do mundo

3.3 o Município tem caminhão da coleta seletiva, sendo orientado a providenciar a contratação direta da associação para o recolhimento dos resíduos recicláveis,

O valor da reputação dos pseudônimos é igual a 0,8 devido aos fal- sos positivos do mecanismo auxiliar, que acabam por fazer com que a reputação mesmo dos usuários que enviam

Promovido pelo Sindifisco Nacio- nal em parceria com o Mosap (Mo- vimento Nacional de Aposentados e Pensionistas), o Encontro ocorreu no dia 20 de março, data em que também

QUANDO TIVER BANHEIRA LIGADA À CAIXA SIFONADA É CONVENIENTE ADOTAR A SAÍDA DA CAIXA SIFONADA COM DIÂMTRO DE 75 mm, PARA EVITAR O TRANSBORDAMENTO DA ESPUMA FORMADA DENTRO DA

O emprego de um estimador robusto em variável que apresente valores discrepantes produz resultados adequados à avaliação e medição da variabilidade espacial de atributos de uma