Escolar Documentos
Profissional Documentos
Cultura Documentos
x = y + 5.0 ∗ z − w/3.0;
8. Frequentemente, é necessário examinar um ou mais caracteres além do próximo lexema para se certificar
de que o lexema correto foi obtido. Dê três exemplos que justificam essa necessidade.
9. Explique o esquema de pares de bufferes com sentinelas, usado na leitura do programa fonte.
10. Escreva expressões regulares para:
(a) Todas as cadeias de sı́mbolos sobre o alfabeto {0,1} com no mı́nimo um 0.
(b) Todas as cadeias de sı́mbolos sobre o alfabeto {0,1} cujo número de 0’s é múltiplo de 3.
(c) Todas as cadeias de letras minúsculas que contêm as cinco vogais em ordem.
(d) Todas as cadeias de letras minúsculas em que as letras estão em ordem lexicográficas crescentes.
(e) Comentários, consistindo em uma cadeia cercada por /* e */, sem um */ intercalado, a menos que
esteja dentre de aspas (”).
(f) Reconhecimento de números inteiros nas bases binária, octal, decimal e hexadecimal. A ausência de
uma letra no final da sequência de dı́gitos denota um número decimal. A presença de uma das letras
B, O ou H, denota um número na base binária, octal ou hexadecimal, respectivamente.
(g) Identificador: uma sequência de letras, dı́gitos e sublinhados ( ), o qual deve começar por uma letra e
não pode terminar com sublinhado.
11. Converta as expressões regulares abaixo em autômatos finitos não-determinı́sticos (AFN).
(a) (a | b)*
(b) (b) (a | b)*abb
(c) ((λ | a)b*)*
(d) (a | b)*abb(a | b)*
(e) letra (letra | digito)
[p. 1 de 2] ,→
Revisão P1 GCC130 – Compiladores 2o sem./2014
(f) (a | b)*a(a | b) | λ
(g) (aa | b)*(a | bb)*
12. Converta os AFNs do exercı́cio anterior em autômatos finitos determinı́sticos (AFD).
13. Escreva código em C ou em Java para implementar os AFDs do exercı́cio anterior.
14. Implemente analisadores léxicos usando o compilador Lex, conforme descrição abaixo:
(a) Reconhecer números reais com qualquer representação (cientı́fica, sinal, etc.).
Exemplos: 1 ; 1.0 ; -1 ; -1.0 ; 1.99 ; 0.99 ; 1.0E05 ; 0.99E-05 ...
(b) Ocultar texto entre as tags <ESCONDER> e </ESCONDER>.
Exemplo:
Entrada: blá blá <ESCONDER>texto a ser ocultado</ESCONDER>
Saı́da: blá blá <ESCONDER>xxxxxxxxxxxxxxxxxxxx</ESCONDER>
(c) Gerar tokens para a linguagem 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 começando com sublinhado)
• 06 – VARIÁVEL $nome (palavras começando com um $)
• 07 – TEXTO ”texto”(strings delimitadas entre aspas ”)
• 08 – NUMERO 123 (sequência de dı́gitos formando um número inteiro, positivo ou negativo)
• 09 – NOME nome (palavras compostas por uma sequência de letras)
• 10 – COMENTÁRIO # texto # (texto delimitado pelo sı́mbolo #)
• 99 – INVALIDO demais elementos não presentes nesta descrição
[p. 2 de 2]