Ficha pl2015-f2

Expressões Regulares

Processamento de Linguagens (LEI - 3ºano)

Este ficha prática contem exercícios para serem resolvidos nas aulas teórico-práticas com vista a sedimentar os conhecimentos relativos a:

  • Motivação para o uso de Expresses Regulares (ERs) como forma de especificar padrões a pesquisar em textos - recurso a utilitários de Linux que seguem essa abordagem;
  • Uso de Expressões Regulares para definir (gerar) Linguagens Regulares;
  • Uso de Expressões Regulares para desenvolver programas eficientes, baseados em algoritmos standard guiados por Autómatos Finitos Deterministas, para reconhecer Linguagens Regulares;
  • Uso de Autómatos Deterministas Reactivos, para processar Linguagens Regulares, isto é, para desencadear ações específicas ao reconhecer frases que derivam de padrões (definidos com base em ERs) - princípio da Programação baseada em regras Condição-Reação, Sistemas de Produção;
  • Geração automática de programas a partir de especificações formais;
  • Uso da ferramenta flex, disponível em ambiente Linux, para processamento de linguagens regulares, nomeadamente para criação de Filtros de Texto em geral.

Para introduzir a ferramenta de geração de programas FLex baseada em especificações com Expressões Regulares, e para ilustrar a importância do uso de autómatos deterministas reactivos como suporte à construção de programas eficientes, propõem-se alguns exercícios, para resolver dentro ou fora da aula, que visam a criação de programas autónomos para filtrar textos (FT).


Pretende-se que utilize a ferramenta flex para implementar uma máquina de es- tados que modele a interacção dum utilizador com um telefone numa cabine pública.

O telefone reage aos seguintes comandos:

LEVANTAR
levantar o auscultador; marca o início duma interacção;
POUSAR
pousar o auscultador; fim da interacção; deverá ser indicado o montante a ser devolvido;
MOEDA <lista de valores>
inserção de moedas (só deverá aceitar moedas válidas, para valores inválidos deverá ser gerada uma mensagem de erro): lista de valores = num, num, ..., num;
T=numero
disca o número ( o número deve ter 9 dígitos excepto se for iniciado por "00"); as diferentes chamadas deverão ser tratadas da seguinte maneira:
  • para números iniciados por "601" ou "641" a chamada é "barrada";
  • para chamadas internacionais (iniciadas por "00") o utilizador tem que ter um saldo igual ou superior a 1,5 euros, caso contrário deverá ser avisado que o saldo é insuficiente e a máquina volta ao estado anterior; a chamada se for realizada tem um custo de 1,5 euros;
  • para chamadas nacionais (iniciadas por "2") o saldo mínimo e custo de chamada é de 25 cêntimos;
  • para chamadas verdes (iniciadas por "800") o custo é 0;
  • para chamadas azuis (iniciadas por "808") o custo é de 10 cêntimos.
ABORTAR
interromper a interacção; a máquina devolve as moedas.

Como extra pode ainda detalhar como é que é devolvido o troco: quantas moedas e de que espécie compõem o troco.

A seguir apresenta-se uma possível interacção exemplo.

LEVANTAR
maq: "Introduza moedas."
MOEDA 10c, 30c, 50c, 2e.
maq: "30c - moeda inválida; saldo = 2e60c"
T=601181818
maq: "Os números vermelhos estão proibidos!"
T=253604470
maq: "saldo = 2e35c"
POUSAR
maq: "troco=2e35c; Volte sempre!" ou maq: "troco= 1x2e, 1x20c, 1x10c, 1x5c; Volte sempre!"