Buscar

COMPILADORES E COMPUTABILIDADE - Unidade 2

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 4 páginas

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

Prévia do material em texto

• Pergunta 1 
0,5 em 0,5 pontos 
 
Supondo o comando: (em C) assinale a alternativa que corresponde a uma das 
possíveis versões de código intermediário dado na forma de quádruplas para este 
comando. 
 
Resposta Selecionada: b. 
 
 
 
• Pergunta 2 
0,5 em 0,5 pontos 
 
Em uma Gramática de Atributos podemos classificar cada um de seus 
atributos em duas categorias, herdados e sintetizados, de acordo com o 
símbolo a quem estão associados durante o seu cálculo. Os chamados 
atributos herdados são aqueles que aparecem ligados a elementos 
posicionados a direita do sinal de derivação, ou seja, em uma regra na forma 
A→α, seriam os atributos ligados a qualquer símbolo da sentença α. Por sua 
vez, os atributos ditos sintetizados são aqueles que aparecem associados ao 
elemento da esquerda do sinal de derivação, isto é, para o nosso exemplo, 
seriam aqueles que estiverem associados ao símbolo A. A respeito dos 
atributos analise os itens a seguir e assinale a alternativa correta. 
I) Entre outros aspectos, a categorização dos atributos é importante pois 
permite determinar o sentido em que devemos percorrer a árvore sintática 
para calculá-lo. No caso dos atributos herdados, como o próprio nome sugere, 
seu valor é calculado a partir de elementos hierarquicamente superiores da 
árvore e dos quais este valor “deriva”. 
II) Atributos sintetizados são computados a partir de nós inferiores da árvore 
sintática, assim os sucessivos valores deste atributo podem ser calculados 
percorrendo a árvore de baixo para cima. Esta categoria de atributos é 
especialmente interessante para a propagação de características comuns a 
diferentes trechos do código, como por exemplo no trecho “int x, y, z;”, em que 
o tipo int pode ser propagado para um nó superior comum a todas as 
variáveis (x, y e z) declaradas no mesmo comando. 
III) Gramáticas que utilizam apenas atributos sintetizados são chamadas de S-
Atribuídas. Na tradução dirigida pela sintaxe, assume‐se que os símbolos 
terminais tenham apenas atributos sintetizados uma vez que as definições 
não providenciem quaisquer regras semânticas, apenas ações para a geração 
de código. 
 
 
Resposta Selecionada: e. 
Todos itens são verdadeiros. 
 
 
• Pergunta 3 
0,5 em 0,5 pontos 
 
O Linker tem a tarefa de reunir em um único programa os vários módulos 
objeto obtidos a partir da tradução dos diferentes arquivos fontes que compõe 
o programa. Esse arquivo resultante, dado por todas as partes devidamente 
 
encaixadas, damos o nome de Módulo Absoluto de Carga. Durante esse 
processo o linker deve ser capaz de resolver as chamadas Referências 
Cruzadas, isto é, referência a elementos externos ao módulo corrente e são 
conhecidos apenas após a ligação do módulos. Tendo em mente estas 
atribuições, é incorreto afirmar que cabe ao Linker: 
 
Resposta 
Selecionada: 
e. 
Copiar o módulo de carga para a memória principal, 
preparando o programa para a sua execução. 
 
 
• Pergunta 4 
0,5 em 0,5 pontos 
 
Usualmente a geração de código acontece em duas etapas. Primeiramente 
ocorre a tradução da estrutura do programa para um código em linguagem 
intermediária e em seguida, esse código dado linguagem intermediária é 
então traduzido para a linguagem simbólica do processador-alvo. A esse 
respeito julgue as afirmativas a seguir e assinale a alternativa correta. 
I - Permitir o reaproveitamento de código, facilitando a portabilidade de um 
compilador para diversas plataformas, uma vez que apenas os módulos finais 
precisam ser refeitos a cada nova plataforma de hardware. 
II - Permitir a utilização de um otimizador de código que analise aspectos 
independentemente de máquina e melhore o código intermediário antes de 
uma tradução definitiva. 
III - Permitir uma compilação portável para diferentes arquiteturas e sistemas 
operacionais independente de qual seja a linguagem fonte. 
 
 
Resposta Selecionada: c. 
Os itens I e II são verdadeiros. 
 
 
• Pergunta 5 
0,5 em 0,5 pontos 
 
Aspectos como a obrigatoriedade de declaração antes do uso, compatibilidade de tipos 
durante atribuições ou mesmo a adequação as regras de escopo na utilização dos 
identificadores, são exemplos de questões que estão além do domínio sintático de uma 
linguagem de programação. Assim a análise semântica é responsável, fundamentalmente, 
por realizar três tarefas básicas: construir uma descrição dos tipos e estruturas de dados 
definidas pelo programador; armazenar informações sobre os identificadores; e verificar 
os tipos e demais aspectos dependentes de contexto na estrutura do programa. 
Acerca da análise semântica de programas, assinale a alternativa correta. 
 
Resposta 
Selecionada: 
c. 
Há aspetos semânticos que estão ligados a execução do programa e 
referem-se a forma como o programa realiza suas tarefas. Por exemplo, 
supondo o comando “SE (i<>0) E (K/I > 10) ...”, entende-se que, se 
concluirmos que a primeira parte é falsa não há necessidade de avaliar a 
segunda (uma vez que para o operador E é impossível obter um 
resultado verdadeiro nesta situação). Por outro lado, se o analisador 
semântico não considerar a relação que envolve estas duas cláusulas, a 
 
falsidade da primeira implicará em um erro de divisão por zero durante 
a avaliação da segunda cláusula. 
 
• Pergunta 6 
0,5 em 0,5 pontos 
 
A respeito dos Carregadores ( Loaders) é incorreto afirmar: 
 
 
Resposta 
Selecionada: 
e. 
Reunir os módulos objeto em um único elemento chamado 
de módulo absoluto de carga. 
 
 
• Pergunta 7 
0,5 em 0,5 pontos 
 
Supondo a expressão dada pela árvore sintática abaixo, assinale a alternativa 
que corresponde ao código intermediário gerado na forma de quádruplas. 
 
 
Resposta Selecionada: a. 
 
 
 
• Pergunta 8 
0,5 em 0,5 pontos 
 
Um dos tipos de analisadores ascendentes é o conhecido como LR(1), que constrói a 
árvore sintática do programa realizando reduções através das regras da gramática 
geradora da linguagem. Considerando o estado corrente do mecanismo reconhecedor 
(um autômato de pilha) e apenas um símbolo da entrada é possível determinar com 
precisão qual a regra apropriada e que de ser aplicada em cada momento do processo de 
análise do programa. 
A construção desse autômato começa com uma ampliação das regras da gramática, as 
quais acrescenta-se uma nova regra que sinalize o início do processo de derivação e 
permita diferenciar qualquer ocorrência do símbolo inicial daquela que se configura como 
raiz da árvore sintática. 
Adicionalmente caracterizamos os diferentes momentos de derivação de uma regra 
através de uma representação na forma de item. Num item dado por o marcador 
sinaliza os símbolos que já foram encontrados pelo parser (os símbolos de α) e também 
aqueles que ainda faltam para que a regra tenha sido completamente derivada . 
Quando todos os símbolos tiverem sido encontrados, ou seja, tivermos um item na 
forma é possível então realizar a redução da sequência correspondente por A. 
Supondo a gramática dada a seguir: 
 
Sabendo que já encontra-se aumentada pela inclusão da regra 0, assinale a alternativa que 
corresponde ao primeiro estado (inicial) do autômato de reconhecimento deste 
analisador. 
 
Resposta Selecionada: d. 
 
 
• Pergunta 9 
0,5 em 0,5 pontos 
 
A respeito da definição e tarefas dos Montadores ( Assemblers), Ligadores ( Linkers) e 
Carregadores ( Loaders) analise as afirmativas a seguir e assinale a alternativa correta. 
I) Os montadores são encarregados da tradução do programa escrito em linguagem de 
montagem ( assembly) para um programa equivalente escrito em linguagem de máquina,isto é, com o conjunto de instruções da arquitetura alvo (ISA – Instruction Set 
Architecture). 
II) Os ligadores, llinkers ou linkeditores são programas responsáveis por unir as 
diferentes partes de um programa e construir um único executável. A sua existência é o 
que permite a modularização de um programa e o uso de bibliotecas estáticas. 
III) O Loader: é responsável pela transferência de um programa do disco para a memória 
principal, deixando-o pronto para a execução. Usualmente o carregador é parte do 
Sistema Operacional. 
 
 
Resposta Selecionada: e. 
Todos itens são verdadeiros. 
 
 
• Pergunta 10 
0,5 em 0,5 pontos 
 
A memória é um recurso controlado pelo sistema operacional e um programa 
não deve ter posições de memória fixas e pré-estabelecidas para que 
funcione corretamente. Usualmente o programador desenvolve seu código 
despreocupado de qual será sua localização na memória, pois caberá ao 
sistema resolver os problemas relacionados com posicionamento do código 
quando colocar o programa na memória para execução. Este processo de 
resolução de endereços é chamado de relocação. 
A atividade de relocação é realizada conjuntamente por montadores e 
carregadores. Os montadores são encarregados de marcar as posições no 
código-objeto passíveis de alteração, enquanto os carregadores devem 
reservar espaço suficiente na memória para receber o código de máquina e 
atualizar suas posições a partir da localização base do programa na memória. 
A esse respeito analise as afirmativas a seguir e assinale a alternativa correta. 
I - As referências aos símbolos externos devem estar presentes no módulo-
objeto e podem ocorrer quanto um símbolo é referenciado no segmento, mas, 
definido, ocorre em outro segmento (descrito como uma referência externa), 
ou ainda, quando um símbolo é definido neste segmento e poderá ser 
referenciado em outro segmento (descrito como uma definição local de um 
símbolo externamente referenciável). 
II - O Dicionário de Símbolos Externos contém todos os símbolos que estão 
envolvidos no processo de resolução de referências entre segmentos: 
símbolos associados a referências externas, a definições locais ou a 
definições de segmentos. 
III - O Diretório de Relocação e Ligação indica, para cada segmento, quais 
posições deverão ter seus conteúdos atualizados, de acordo com o 
posicionamento em memória deste e de outros segmentos.

Continue navegando