Next: About this document ...
Segunda Prova de MAC-211
Primeiro semestre de 2001
Profs. Gubi e Fabio
- (2.0 pontos) Escreva expressões regulares para cada uma das
seguintes condições:
- Reconheça cadeias que possuam letras maiúsculas e minúsculas
alternadas.
- Reconheça exatamente 1024 cadeias diferentes. Faça isso de duas
formas diferentes (usando operadores diferentes).
- Reconheça todos os números inteiros positivos menores que 3000.
- Reconheça todos os números hexadecimais que podem ser representados
com um byte.
- (2.0 pontos) O que devemos fazer para depurar um programa que
apresenta um determinado erro (bug) só de vez em quando,
indeterministicamente? Dê um exemplo.
- (2.0 pontos) Para cada uma das chamadas do awk abaixo, explique
o que ela faz.
- awk 'length($0) > 80'
- awk '{ if (NF > 0) print }'
- awk '{ printf ``%d: %s'', NR, $0 }'
- awk '/banana/ { print $2 $1 }'
- (2.0 Pontos) Como implementar na calculadora recursiva o
operador (potência)?
- (2.0 pontos) Escreva uma especificação em flex
para um filtro que copia um texto da entrada para a saída, trocando
- todas as seqüências consecutivas de espaços e TABs por um único
espaço,
- todos os espaços em branco nos finais das linhas por nada
(remoção) e
- todas as ocorrências da palavra usuário pelo nome do
usuário devolvido pela função char *getlogin(). Para
usar essa função é preciso incluir o arquivo de cabeçalho
unistd.h.
Boa(sorteprova)
Expressões Regulares
--------------------
`x' match the character `x'
`.' any character (byte) except newline
`[xyz]' a "character class"; matches `x' a `y', or a `z'
`[a-z]' a "character class" with a range in it; matches any lowercase letter.
`[^A-Z]' a "negated character class": any character but those in the class.
`r*' zero or more r's, where r is any regular expression
`r+' one or more r's
`r?' zero or one r's (that is, "an optional r")
`r{m}' exactly m r's
`r{m,n}' anywhere from m to n r's
`r{m,}' m or more r's
`(r)' match an r; parentheses are used to override precedence
`rs' the regular expression r followed by the regular expression s;
`r|s' either an r or an s
`^r' an r, but only at the beginning of a line
`r$' an r, but only at the end of a line
AWK
---
Um programa é uma seqüência de linhas do tipo:
/PADRÃO/ { AÇÃO } ou
CONDIÇÃO { AÇÃO }
NF = número de campos no registro (linha) atual
se i > 0, $i corresponde ao i-ésimo campo
$0 corresponde ao registro (linha) inteiro
FLEX
----
Uma especificação é da forma:
inicializações
%%
regras
%%
código C principal
regras são da forma
PADRÃO {
AÇÃO
}
char *yytext contém o texto recém reconhecido pelo PADRÃO.
A ação ECHO copia yytext para a saída.
Next: About this document ...
Fabio Kon
2002-06-19