========================================== 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 ===========