Buscar

Linguagens e Compiladores - Nota 10 - Semana 5

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

Linguagens e Compiladores - Semana 5 
 
PERGUNTA 1 
Uma estrutura de dados que representa o programa-fonte durante a tradução é 
denominada representação intermediária ou IR. Além da IR, a estrutura de dados 
principal usada durante a tradução é a tabela de símbolos. 
 
Assinale a alternativa que descreve o que é um código intermediário. 
 
a. É a forma mais complexa de um compilador trabalhar. 
 
b. É a representação inicial para a construção do código-fonte. 
 
c. É a representação intermediária, semelhante ao código-alvo. 
 
d. É a forma mais abstrata de um compilador trabalhar. 
 
e. É o código final, ou seja, o código de máquina. 
 
PERGUNTA 2 
Compilar é o ato de transformação de um código fonte escrito em uma linguagem de 
programação específica em um código objeto para ser lido por um computador. O 
processo estrutural lógico da compilação pode ser dividido em duas fases: a fase da 
análise e a fase da síntese. Cada fase, ainda, pode ser subdivida em outras sub fases. 
 
Nesse contexto, assinale a alternativa correta que apresenta a fase do processo de 
compilação que é gerado a partir da árvore de derivação. 
 
a. fase sintática. 
 
b. fase léxica. 
 
c. código intermediário. 
 
d. gerador de código. 
 
e. otimizador de código. 
 
PERGUNTA 3 
Há duas formas populares de código intermediário: o código de três endereços e o P-
código. 
 
Considerando algumas das propriedades dessas formas, analise as afirmativas a seguir 
e assinale V para a(s) verdadeira(s) e F para a(s) falsa(s). 
 
I. ( ) O P-código foi planejado para ser executado diretamente na máquina. 
II. ( ) Um código de três endereços requer que o compilador gere nomes para os 
temporários. 
III. ( ) A instrução mais básica do código de três endereços é projetada para 
representar a avaliação de expressões aritméticas. 
IV. ( ) Os temporários correspondem aos nós interiores da árvore sintática e 
representam seus valores computados. 
 
Assinale a alternativa que apresenta a sequência CORRETA. 
 
a. V, F, V, F. 
 
b. F, F, F, V. 
 
c. V, V, F, V. 
 
d. F, V, V, V. 
 
e. V, V, V, V. 
 
PERGUNTA 4 
A geração de código _______ ou geração direta de código-alvo pode ser vista como 
uma _______ similar a muitos dos problemas de _______. 
 
Preencha as lacunas escolhendo a alternativa CORRETA. 
 
a. direto, aglomeração de atributos, atributos. 
 
b. direto, computação de atributos, atributos. 
 
c. atributos, computação de atributos, atributos. 
 
d. intermediário, computação de atributos, atributos. 
 
e. três endereços, aquisição de atributos, classe. 
 
PERGUNTA 5 
Para acomodar todas as construções de uma linguagem de programação padrão, será 
preciso variar a forma do código de três endereços para cada construção. Se uma 
linguagem contiver características pouco usuais, pode ser necessário inventar novas 
formas de código de três endereços para expressar essas características. 
 
Com base no apresentado, avalie as afirmações a seguir e relacione adequadamente 
os termos aos seus conceitos. 
 
1. TINY 
2. Código de três endereços 
3. P-código 
 
I. Não apresenta uma forma padrão, da mesma maneira como não existe uma forma 
padrão para as árvores sintáticas. 
II. É reconhecida por ser uma linguagem de programação imperativa, ou seja, de 
pequeno porte e que contém somente comandos e expressões. 
III. É projetado para ser executado diretamente e contém uma descrição implícita de um 
ambiente de execução específico, que inclui o tamanho dos dados. 
 
Assinale a alternativa que correlaciona adequadamente os dois grupos de 
informação. 
 
a. 1 – I; 2 – II; 3 – III. 
 
b. 1 – II; 2 – I; 3 – III. 
 
c. 1 – I; 2 – III; 3 – II. 
 
d. 1 – III; 2 – II; 3 – I. 
 
e. 1 – II; 2 – III; 3 – I. 
 
PERGUNTA 6 
Conforme estudado, a tarefa final de um compilador é gerar código executável para uma 
máquina-alvo, o qual deve ser uma representação fiel da semântica do código-fonte. 
 
Com relação à geração de código, avalie as afirmativas a seguir. 
 
I. Na geração de código, não necessariamente estão envolvidas tentativas de otimizar 
ou melhorar a velocidade e/ou o tamanho do código-alvo. 
II. A geração de código é a fase mais complexa de um compilador. 
III. Em razão da facilidade de se gerar um código, um compilador geralmente realiza 
essa fase em um único passo. 
IV. Um compilador sempre gera um código executável. 
 
Está correto o que se afirma em: 
 
a. I e III, apenas. 
 
b. I, II e IV, apenas. 
 
c. II, apenas. 
 
d. I, III e IV, apenas. 
 
e. I, II e III, apenas. 
 
PERGUNTA 7 
As técnicas-padrão de geração de código requerem modificações das buscas em pós-
ordem na árvore sintática, decorrentes das gramáticas de atributos de exemplos 
anteriores ou ações equivalentes durante uma análise sintática, caso uma árvore 
sintática não seja gerada explicitamente. 
 
Com relação ao apresentado, analise as asserções a seguir e as relações propostas 
entre elas. 
 
I. Se um compilador gerar código intermediário diretamente durante a análise sintática 
ou a partir de uma árvore sintática, deve ocorrer uma passada adicional pelo código 
intermediário para gerar o código-alvo final (em geral, após algum processamento 
adicional do código intermediário). 
PORQUE 
II. Esse passo pode ser bastante simples, especialmente se o código intermediário for 
altamente simbólico e contiver pouca informação sobre a máquina-alvo ou o ambiente 
de execução. 
 
Analisando as asserções anteriores, conclui-se que: 
 
a. as duas asserções são verdadeiras, e a segunda justifica a primeira. 
 
b. as duas asserções são falsas. 
 
c. a primeira asserção é falsa, e a segunda é verdadeira. 
 
d. as duas asserções são verdadeiras, e a segunda não justifica a primeira. 
 
e. a primeira asserção é verdadeira, e a segunda é falsa.