==========================================
COMPILADORES I - UNISINOS
Prof. Osório - fosorio at unisinos dot br
==========================================
LEX / YACCC - FLEX / BISON
****************************
(ou mesmo JAVACC)
>>> Sugestão de Exercícios:
***********
** LEX **
***********
1. Reconhecer: Nro. real com qualquer representação (científica, sinal, etc),
URL, Nro. de telefone válido (com DDI/DDD e operadora), Nros. romanos,
TAGs HTML, Strings de comentário em "C"
2. Comando WC - Word Count do Linux (visto em aula)
Saída: nro. de caracters, linhas, palavras
3. DesHTMLizador (visto em aula)
Saída: texto puro sem as tags HTML
4. Extrator de URLs de Páginas HTML (visto em aula)
Saída: lista de URL contidas dentro do HTML, útil para quem faz um Web-Spider
5. Extrator de E-Mails (Exemplo: mailto:fulano@xxx.com)
Saída: lista de e-mails contidos em um arquivo texto que estejam descritos
no formato indicado acima
6. Ocultador de Textos com "estados" do Lex (visto em aula)
Entrada: blá blá Texto oculto blá blá
Saída : blá blá XXXXXXXXXXXX blá blá
7. Ocultador/Desocultador com criptografia
Igual ao exercício acima, mas onde a transformação usa uma função de
codificação/decodificação do texto por cripotografia
8. Comando SED - Substitui palavras por outras, de acordo com uma lista
especificada em um arquivo texto(Exemplo: subst,"BEGIN","COMEÇO";
subst,"END","FIM";...)
9. Clean comments (limpa comentários em um código fonte)
10. Listar um programa numerando linhas de código (desconsideras linha em branco
e comentários)
****************
** LEX/YACC **
****************
1. Calculadora de 4 operações para nros. reais com uso de variáveis (visto em aula)
2. Mini-Pascal, reconhecendo: declaração de variáveis e atribuições (visto em aula)
3. Parser de Datas (dia/mês/ano), com validação da data!
4. Gramática e Parser de um comando IF com uso de expressões, variáveis e
operadores numéricos/relacionais
5. Tradutor de textos (baseado em um comando como o SED), mas que leve
em consideração o contexto/categoria do que está sendo traduzido.
Exemplo: traduz para inglês palavra por palavra usando tabela
agora traduz para francês palavra por palavra usando outra tabela
6. Criar um programa que faça um XREF (cross-reference) das variáveis usadas
em um programa em PASCAL, ou em Mini-Pascal (Listar cada variável: linha em que
foi declarada, linha em que foi feita referência a ela - atribuição ou uso).
O XREF deve desprezar comentários, strings e as palavras-chave da linguagem.
7. Refazer o programa acima para a Linguagem BASIC.
Referências sobre Basic:
Dartmouth BASIC => http://encyclopedia.laborlawtalk.com/Dartmouth_BASIC
Tiny Basic => http://encyclopedia.laborlawtalk.com/Tiny_BASIC_programming_language
BASIC => http://encyclopedia.laborlawtalk.com/BASIC_programming_language
8. Conversor de E-Mails visando ocultá-los em um texto (evitar que seu endereço
seja "capturado" por programas automáticos que irão usá-lo para enviar SPAM)
Exemplo: "nome.sobrenome@site.dominio.com"
Transformar em "nome DOT sobrenome AT site DOT dominio DOT com"
Fazer uma pequena gramática para evitar de transformar o que não é email!
9. Criar uma pequena linguagem de controle de termostato
Vide exemplo em: http://howtos.linux.com/howtos/Lex-YACC-HOWTO-4.shtml ou
http://coisa.im.ufba.br/~tiago/lex_yacc/lexyacc-4.html
10. Implemente seu trabalho prático da disciplina! Esta é a melhor maneira de
se preparar para a prova...
===
F.Osório
Abril 2005
===========