Você está na página 1de 2

UNIVERSIDADE FEDERAL DE LAVRAS

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO


Curso: Ciência da Computação GCC130 – Compiladores Professor: Ricardo Terra

Pontuação: φ pontos (14 questões) REVISÃO P1 Data: Antes P1

INFORMAÇÕES SOBRE REVISÃO P1:


1. A atividade é individual.
2. Cópias (total ou parcial) serão devidamente penalizadas.
3. A entrega é opcional.
• Porém, se feita, a atividade deve ser manuscrita e entregue de forma virtual por meio da submissão de um único arquivo PDF
até a data/hora limite especificada no Moodle.

O objetivo desta lista é auxiliar alunos na revisão do conteúdo da disciplina.


1. Qual é a diferença entre um compilador e um interpretador?
2. Explique o que é um assembler (montador), um linker (editor de ligação) e um loader (carregador).
3. Explique resumidamente cada uma das fases de um compilador.
4. Mostre como a expressão de atribuição abaixo (na linguagem C) seria avaliada por cada uma das fases de
um compilador. Todas as variáveis (x, y, z, w) são do tipo float.

x = y + 5.0 ∗ z − w/3.0;

5. O que é uma tabela de sı́mbolos?


6. Como é feito o tratamento de erros em um compilador?
7. Faça uma tabela mostrando os tokens e os respectivos lexemas extraı́dos após a análise léxica no seguinte
trecho de código em C:
f l o a t quadradoLimitado ( f l o a t x ) {
/∗ r e t o r n a x ao quadrado , mas nunca maior do que 100 ∗/
r e t u r n ( x <= −10.0||x >=10.0)?100: x∗x ;
}

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] 

Você também pode gostar