Вы находитесь на странице: 1из 3

Linguagens Regulares e Introducao `a Programacao

Disciplinas envolvidas: Algoritmos e Programacao I, Algoritmos e Programacao II, Teoria da Com-


putac ao
Autor: Jose de Oliveira Guimar aes
Descricao
Suponha que seja necessario vericar, na linguagem C, se os caracteres digitados na entrada
padr ao sao uma sequencia de zero ou mais letras v. Isto poderia ser feito pelo seguinte programa
em C:
#include <stdio.h>
int main(void) {
char ch;
while ( (ch = getchar()) != \r && ch != \n )
if ( ch != v )
break;
if ( ch != \r && ch != \n )
puts("n~ ao aceito");
else
puts("aceito");
return 0;
}
Este programa imprime aceitoe nao aceitose a entrada e ou n ao e uma sequencia de vs. A
entrada deve terminar com um \r ou \n, o que pode ser conseguido teclando-se ENTER.
N ao e difcil reconhecer padroes um pouco mais complexos. Por exemplo, se a entrada e o
car ater a ou b. Ou uma sequencia de caracteres a ou b, em qualquer ordem:
#include <stdio.h>
int main(void) {
char ch;
while ( (ch = getchar()) != \r && ch != \n )
if ( ch != a && ch != b )
break;
if ( ch != \r && ch != \n )
puts("n~ ao aceito");
else
puts("aceito");
return 0;
}
Este tipo de padr ao de repeti cao de caracteres e especicado usando-se uma linguagem regular ou
1
expressao regular, estudada em Teoria da Computac ao. Contudo, podemos fazer programas que
reconhecem tais linguagem mesmo sem a deni cao formal destas.
Um outro exemplo e o reconhecimento de sequencias tais que a primeira letra e i seguida de
v seguida de pares , e v seguido de ;. Isto e especicado como a express ao regular iv(,v)*;
(que ser a estudada futuramente. Os parenteses n ao fazem parte da expressao, apenas delimitam
, e v. O asterisco signica repetic ao zero ou mais vezes. Neste caso, repetic ao zero ou mais
vezes de ,v). Esta express ao regular pode ser reconhecida pelo seguinte programa em C:
#include <stdio.h>
int main(void) {
int ch;
int aceito = 1;
if ( getchar() != i )
aceito = 0;
else {
if ( getchar() != v )
aceito = 0;
else {
// reconhece (,v)*, sequ^encias de , seguido de v
ch = getchar();
while ( ch == , && aceito ) {
if ( getchar() != v )
aceito = 0;
else
ch = getchar();
}
if ( ch != ; )
aceito = 0;
else
ch = getchar();
if ( ch != \r && ch != \n )
aceito = 0;
}
}
if ( aceito )
puts("aceito");
else
puts("n~ ao aceito");
return 0;
}
Esta expressao regular e uma abstrac ao para declarac ao de uma ou mais variaveis inteiras em C:
int j, k, ... z;
2
Na expressao iv(,v)*; o carater i representa int e v representa o nome da vari avel.
Exerccios
1. Faca um programa em C que reconheca sequencias de dgitos em C (nao se preocupe se a
sequencia nao e um int ou long valido.
2. Faca um programa em C que reconheca identicadores validos em C, que podem conter letras,
n umeros e _ (sublinhado), comecando por letra ou sublinhado.
3. Faca um programa em C que reconheca uma expressao regular que deve comecar por i seguido
de (, uma letra qualquer, ), s e opcionalemente seguido de e e s. Esta expressao regular
e uma abstracao para o comando if de C, que tem uma parte else opcional. Duas sequencias
v alidas sao i(a)s e i(z)ses.
4. Faca um programa em C que reconheca uma expressao regular que abstrai o comando composto
entre { e }. Use s para as instrucoes entre as chaves. Exemplos de sequencias validas sao {},
{sss} e {s}.
5. Faca um programa em C que reconheca as sequencias comecadas por i seguido por dgitos ou
comecadas por a seguido de letras min usculas ou comecadas por A seguido de letras mai usculas.
6. A linguagem XML e utilizada para armazenar dados de forma estruturada. Como exemplo, os
dados de uma agenda poderiam ser armazenados por um arquivo texto com o seguinte conte udo:
<agenda>
<contato>
<nome> Arquimedes </nome>
<tel> 3231-9784 </tel>
<tel> 9821-3425 </tel>
</contato>
<contato>
<nome> Isaac Newton </nome>
<tel> 3234-3433 </tel>
<tel> 7623-2384 </tel>
<tel> 3633-2444 </tel>
</contato>
<contato>
<nome> Carl Gauss </nome>
<tel> 6328-7832 </tel>
</contato>
</agenda>
Usando a para agenda, c para contato, n para nome, t para telefone, este exemplo seria
representado pela sequencia acnttcntttcnt. A forma geral de uma sequencia e a(cnt*)*. Faca
um programa em C que reconheca as sequencias validas.
3

Вам также может понравиться