Buscar

Linguagens e Compiladores - Nota 10 - Semana 7

Prévia do material em texto

Linguagens e Compiladores - Semana 7 
PERGUNTA 1 
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. 
 
Considerando as características desse tipo de ambiente, analise as afirmativas a seguir 
e assinale V para a(s) verdadeira(s) e F para a(s) falsa(s). 
 
I. (V) É fundamental a alocação adequada dos registradores e a manutenção das 
informações sobre o uso dos registradores, ou seja, quais registradores estão 
disponíveis e quais contêm valores conhecidos. 
II. (V ) A geração de código a partir de um código intermediário requer uma das 
seguintes técnicas-padrão ou as duas: expansão de macros e simulação estática. 
III. (V ) A expansão de macros requer a substituição de cada tipo de instrução de 
código intermediário por uma sequência equivalente de instruções de código-alvo. 
IV. (V ) Exige-se que o compilador acompanhe as decisões sobre localização e 
particularidades de código em estruturas de dados separadas e que os procedimentos 
de macros variem a sequência de código. 
 
Assinale a alternativa que apresenta a sequência CORRETA. 
 
a. F, V, V, V. 
 
b. V, V, V, V. 
 
c. V, F, V, V. 
 
d. V, V, F, V. 
 
e. F, F, F, V. 
 
 
PERGUNTA 2 
Conforme estudado, as características gerais da geração de código permanecem 
constantes para uma ampla variedade de arquiteturas. 
 
Quanto à sequência de operações, avalie as afirmativas a seguir. 
 
I. Apresentam a geração de código vista como computação de um atributo de cadeia 
sintetizado, sendo útil para apresentar com clareza as relações entre as sequências de 
código. 
II. O uso da concatenação de cadeias não provoca uma grande quantidade de cópias 
de cadeias. 
III. Em regra, é muito mais desejável gerar pequenos trechos de código à medida que 
ocorre a geração de código e gravar esses trechos em um arquivo ou, então, inseri-los 
em uma estrutura de dados. 
IV. Embora seja útil ver o código como puramente sintetizado, a geração de código 
depende grandemente dos atributos herdados. 
 
Está correto o que se afirma em: 
 
a. I, III e IV, apenas. 
 
b. I, II e IV, apenas. 
 
c. II, apenas. 
 
d. I, II e III, apenas. 
 
e. I e III, apenas. 
 
 
PERGUNTA 3 
A complexidade da descrição do código intermediário e do código-alvo para esse 
mecanismo é aumentada, de forma mais significativa que para outros mecanismos das 
linguagens, em decorrência de diferentes máquinas-alvo usarem mecanismos 
consideravelmente distintos para as ativações e, também, em razão de as ativações 
dependerem da organização do ambiente de execução. 
 
Com base no apresentado, avalie as afirmações a seguir e relacione adequadamente 
os termos aos seus conceitos. 
 
1. Declaração 
2. Parâmetros 
3. Sequência de ativação 
 
I. Procedimento também conhecido como definição de função. 
II. Estrutura dos procedimentos oriundos das funções. 
III. Código da função ativada. 
 
Assinale a alternativa que correlaciona adequadamente os dois grupos de 
informação. 
 
a. 1 – I; 2 – II; 3 – III. 
 
b. 1 – III; 2 – II; 3 – I. 
 
c. 1 – II; 2 – I; 3 – III. 
 
d. 1 – I; 2 – III; 3 – II. 
 
e. 1 – II; 2 – III; 3 – I. 
 
 
PERGUNTA 4 
Desde os primeiros compiladores dos anos 1950, a qualidade do código gerado por um 
compilador tem grande importância. Essa qualidade pode ser medida pela velocidade e 
pelo tamanho do código-alvo, embora a velocidade seja, em geral, mais importante. 
 
Com relação ao apresentado, analise as asserções a seguir e as relações propostas 
entre elas. 
 
I. Os compiladores modernos lidam com o problema da qualidade de código com a 
execução de diversos passos no processo de compilação. V 
PORQUE 
II. A coleta de informações sobre o código-fonte e o uso dessas informações para 
transformações para melhoria de código nas estruturas de dados que representam o 
código são exemplos desses passos. Diversas técnicas para melhorar a qualidade do 
código foram desenvolvidas ao longo dos anos, as quais são identificadas como 
técnicas de otimização de código. 
 
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. a primeira asserção é verdadeira, e a segunda é falsa. 
 
e. as duas asserções são verdadeiras, e a segunda não justifica a primeira. 
 
 
PERGUNTA 5 
O processo de compilação é subdivido em duas partes: a análise do código e a síntese. 
A fase de análise é conhecida também como front-end, e a fase de síntese é conhecida 
como back-end. Ao fim da primeira etapa, como no final da etapa da síntese, um código 
objeto é gerado. Este código é interpretado e executado pelo computador. 
 
Considerando as oportunidades de otimização do código, analise as afirmativas a seguir 
e assinale V para a(s) verdadeira(s) e F para a(s) falsa(s) com relação 
I. (V ) Há a eliminação do chamado código morto, ou seja, partes do código que são 
inoperantes. 
II. ( V ) Há a renomeação das variáveis de curta duração, conhecidas como variáveis 
temporárias. 
III. ( V ) Ferramentas de software para otimização do código podem ser usadas, como 
a Code Profiler. 
IV. ( v ) É possível usar técnicas, como Peephole ou baseados, em análise do tempo 
de vida. 
 
Assinale a alternativa que apresenta a sequência CORRETA. 
 
a. V, F, V, V. 
 
b. F, V, V, V. 
 
c. V, V, V, V. 
 
d. V, V, F, V. 
 
e. F, F, F, V. 
 
1,68 pontos 
PERGUNTA 6 
Se o código gerado for visto como um atributo de cadeia de caracteres (em que as 
instruções são separadas por caracteres de mudança de linha), esse código passa a 
ser um atributo sintetizado que pode ser definido com base em uma gramática de 
atributos e gerado diretamente durante a análise sintática ou por um percurso em pós-
ordem na árvore sintática. 
 
Observe a gramática a seguir. 
 
exp → id = exp ÷ aexp / aexp → aexp + fator ÷ fator / fator → (exp) ÷ num ÷ id 
 
Agora, assinale a alternativa correta. 
 
a. Essa gramática não contém operações, apenas expressões. 
 
b. Essa gramática contém apenas uma operação: atribuição (com o símbolo =). 
 
c. Essa estrutura de dados contém apenas uma operação (com o símbolo *). 
 
d. Essa gramática contém apenas duas operações: atribuição (com o símbolo =) e adição 
(com o símbolo +). 
 
e. Essa gramática contém apenas três operações: atribuição (com o símbolo exp), adição 
(com o símbolo +) e fator.

Continue navegando