Exercicios Lex Flex
Exercicios Lex Flex
Exercicios Lex Flex
Osrio
Pag.: 1
NIVERSIDADE DO VALE DO RIO DOS SINOS CINCIAS EXATAS E TECNOLGICAS Curso de Informtica
-U
COMPILADORES I
Disciplina: Compiladores I Professor responsvel: Fernando Santos Osrio Semestre: 2006/2 E-mail: fosorio@ unisinos.br Web: http://inf.unisinos.br/~osorio/compil.html Horrio: Tutoria
2.
3.
Pag.: 2
EXPRESSES REGULARES Usada pelo LEX / FLEX: [0-9] => Reconhece um dgito [a-zA-Z] => Reconhece uma letra (comum = sem acentos) [\ \t\n] => Reconhece um espao em branco ou um tab ou uma nova linha xxxxx => Reconhece a seqncia de caracteres xxxxx Smbolos especiais: + => * => ? => \n => . => xxx$ => ^xxx => [^x] => [xyz] => [a-z] => x{n} => x{n,} => x{n,m}=> xx|yy => (x|y) => x => Exemplo:
1 ou mais ocorrncias [0-9]+ => Um nmero 0 (nenhuma) ou mais ocorrncias [0-9][0-9]* => Um nmero 0 (nenhuma) ou apenas 1 ocorrncia -?[0-9]+ => Um nmero com/sem sinal Reconhece a marca de fim de linha / nova linha Aceita um caracter qualquer de entrada Reconhece xxx se for seguido de um fim de linha Reconhece xxx se este estiver imediatamente aps o incio de uma linha Reconhece qualquer caracter menos x Reconhece um dos caracteres xyz indicados Reconhece um caracter pertencente ao intervalo de a-z Reconhece um nmero exato n de ocorrncia de x Reconhece a ocorrncia de no mnimo n vezes de x Reconhece a ocorrncia de x entre no mnimo n e no mximo m vezes Reconhece a ocorrncia de xx ou de yy Agrupa (sub)expresses regulares Reconhece exatamente o caracter x (usado com caracteres especiais). Ex.: +
Exemplos de expresses regulares simples: DIGITO [0-9] LETRA [a-zA-Z] ESPACO [\ \t\n] INTEIRO [0-9]+ INTSIGNED -?[0-9]+ DECIMAL [0-9]*\.[0-9]+ => aceita .33 / no aceita nmeros sem casas decimais INTOUDEC ([0-9]+)|([0-9]*\.[0-9]+) IOUDSIGNED -?(([0-9]+)|([0-9]*\.[0-9]+)) NOMEVAR [a-z][a-z0-9\_]* => usando opo case insensitive... Exerccios para treinamento: Defina as expresses regulares capazes de reconhecer... 1) Nros. de Telefones no Brasil 2) Placas de Carros Brasileiros 3) ISBN de um livro 4) Endereos IP vlidos 5) Prefixos de estaes de rdio (e.g. 102.3 MHz) 6) Nmeros romanos 7) Nmero de matrcula da Unisinos 8) Nmeros reais (qualquer notao, incluindo cientfica) 9) Tags HTML (padro) 10) URL de pginas Web 11) Palavras da Lngua Portuguesa 12) Strings de um programa em linguagem C
Pag.: 3
TRABALHO PRTICO
LISTA DE EXERCCIOS 1 Implementar Analisadores LXICOS para reconhecer os elementos descritos abaixo, enviando os arquivos do Lex/Flex (*.l) para o professor por e-mail ([email protected]) at a stima semana do semestre. 1. Reconhecedor de: 1.1. Nro. real com qualquer representao (cientfica, sinal, etc). Exemplos: 1 ; 1.0 ; -1 ; -1.0 ; 1.99 ; 0.99 ; 1.0E05 ; 0.99E-05 ... 1.2. Nros. Romanos: de 0 a 1999 Incluindo os smbolos: I=1, V=5, X=10, L=50, C=100, D=500, M=1000 1.3. Nmeros de telefone vlidos no Brasil, inclusive com operadora. Exemplos: 55555555 ; 5555.5555 ; 5555-5555 ; (55) 55555555 ; 55-5555.5555 ; (55) (55) 5555-5555 ; +55 (55) 5555.5555 ; 55 55 5555-5555 ; (55 55) 5555-5555 ; (55-55) 5555-5555 ; 55 XX 55 5555 5555 ; 55 (xx) 55 55555555 ; 0 (xx) 55 5555 5555 ; ( + 55 ) xx ( 55 ) 55555555 ; +55 (55) 5555 5555 ; e demais variaes como estas. Usar google: <Tel Fax 55> ou <Tel Fax 55 xx> para obter exemplos como estes 2. Comando PCC Pascal Command Count (inspirado no Word Count do Linux - visto em aula). Sada do programa: nro. total de caracteres, linhas, palavras e comandos bsicos em Pascal encontrados em um programa fonte. No considerar os comentrios entre (* e *) e entre { e }, ignorando tambm os textos dentro de strings (entre apstrofes: ). Os comandos bsicos do Pascal so todas as keywords padro da linguagem pascal. 6. Ocultador de Textos com uso e troca de "estados" (%s) do Lex Entrada: bl bl <HIDE>Texto oculto</HIDE> bl bl Sada : bl bl <HIDE>XXXXXXXXXXXX</HIDE> bl bl 7. Ocultador/Desocultador com criptografia Igual ao exerccio acima, mas onde a transformao usa uma funo de codificao/decodificao do texto por cripotografia. A criptografia qualquer funo que dado um cdigo A gere um cdigo B, que depois possa ser revertido, ou seja, dado o cdigo B gere de volta o cdigo A. Entrada: bl bl <CRIPTO>SEGREDO</CRIPTO> bl bl Sada : bl bl <CRIPTO>TFHSFEP</CRIPTO> bl bl 8. Gerador de TOKENS para uma linguagem como a descrita abaixo 00 - DELIMITADOR , : ; . 01 - OPERADOR_RELACIONAL < > = >= <= => =< <> 02 OPERADOR_ARITMETICO + - * / SQR SQRT SIN COS TAN 03 - PALAVRA_RESERVADA Begin End For Do If Then Else Elseif Endif While Repeat Until 04 - TIPO_DADO Integer Real Float Double Char String Boolean 05 FUNCAO _nome (palavras comeando com underscore) 06 VARIVEL $nome (palavras comeando com um $) 07 TEXTO texto (strings delimitadas entre aspas ) 08 NUMERO 123 (seqncia de dgitos formando um nmero inteiro, positivo ou negativo) 09 NOME nome (palavras compostas por uma seqncia de letras) 10 COMENTRIO # texto # (texto delimindado pelo #) 99 INVALIDO demais elementos no presentes nesta descrio