Baixe o app para aproveitar ainda mais
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.
Compartilhar