Buscar

Atividade Objetiva 4 - Compiladores - Nota 0.8 de 1.0

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 5 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

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

Atividade 4
Iniciado: 10 abr em 18:38
Instruções do teste

Pergunta 1 0,2 pts
Importante:
Caso você esteja realizando a atividade através do aplicativo "Canvas Student", é necessário que
você clique em "FAZER O QUESTIONÁRIO", no final da página.
Leia o texto a seguir:
 
Uma matriz de símbolos é muito conveniente para projetar como um tipo de dados abstrato ou como
uma classe. Dessa forma:
Alterações internas na forma como ele é organizado não afetarão o restante do código do
compilador.
Namespaces diferentes são facilmente definidos como tabelas de símbolos diferentes. Tabela de
símbolos é uma importante estrutura de dados criada e mantida pelo compilador para
acompanhar a semântica das variáveis, ou seja, armazena informações sobre o escopo e
informações sobre nomes, informações sobre instâncias de várias entidades, como nomes de
variáveis e funções, classes, objetos, etc.
 
Refletindo sobre a tabela de símbolos, avalie as seguintes asserções e a relação proposta entre
elas.
 
I. A tabela com uma lista encadeada, quando uma sequência de células ligadas ou encadeadas
umas às outras, é adequada para arrays com um número muito pequeno de símbolos.
 
PORQUE
 
II. É rápido inserir e pesquisar na tabela encadeada, já que serve para armazenar elementos em
certa ordem, mas ela requer um design cuidadoso da provisão para casos de colisão.
 
A respeito dessas asserções, assinale a opção correta:
A+
A
A-
NOTA: 0.8 de 1.0

Pergunta 2 0,2 pts

A asserção I é uma proposição falsa, e a II é uma proposição verdadeira.
As asserções I e II são proposições verdadeiras, e a II é uma justificativa da I.
A asserção I é uma proposição verdadeira, e a II é uma proposição falsa.
As asserções I e II são proposições verdadeiras, mas a II não é uma justificativa da I.
As asserções I e II são ambas proposições falsas.
Leia o texto a seguir:
 
O comportamento de uma tabela de símbolos depende fortemente das propriedades das
declarações da linguagem traduzida. Por exemplo, a forma como as operações inserir e remover
manipulam a tabela de símbolos, quando essas operações devem ser ativadas e quais atributos
devem ser inseridos na tabela, tudo isso varia muito de linguagem para linguagem. Até mesmo o
momento durante a tradução/execução em que a tabela de símbolos pode ser construída, e por
quanto tempo essa tabela deve existir, pode variar muito entre as diferentes linguagens.
 
Fonte: LOUDEN, K. C. Compiladores: princípios e práticas. São Paulo. Cengage Learning Brasil,
2004.
 
Dependendo da linguagem escolhida, a tabela de caracteres pode servir a qual propósito?
Armazenar os nomes de todas as entidades de forma estruturada em vários locais de acordo com a estrutura.
Armazenar informações do código hash do objeto durante o processo de compilação.
Criar símbolos predefinidos após o processo de compilação para guardar informações dos nomes.
Implementar novas atribuições e expressões no código-fonte que sejam semanticamente incorretas.
Mapear nomes lidos pelo compilador para suas informações correspondentes.
A+
A
A-
Pergunta 3 0,2 pts

Pergunta 4 0,2 pts
Leia o texto a seguir:
 
O processo de geração de código é realizado por um componente conhecido como gerador de
código, parte do compilador de programa. O código-fonte original de qualquer programa passa por
vários ganhos antes que o executável final seja gerado, e quando for finalmente gerado é, na
verdade, um código de máquina que os sistemas de computador podem executar facilmente. A
geração do código é a última fase da tradução. Seu resultado é um módulo montador ou um módulo
de objeto (ou inicialização). Ao contrário das linguagens interpretadas, as compiladas não executam
o código imediatamente. Ele deve ser construído primeiro, o que é uma etapa extra e um tempo
extra.
O código é mais difícil de depurar: você tem que recompilá-lo para cada, mesmo uma pequena
mudança. O próprio processo de encontrar e eliminar erros pode não ser claro.
 
Considerando as reflexões apresentadas, assinale a opção correta.
A geração de código inclui várias subtarefas específicas e relativamente independentes. Obviamente, a
independência dessas subtarefas é relativa.
A tarefa de um gerador de código é construir um programa de máquina equivalente para um programa em
linguagem de entrada. A entrada para um gerador de código é uma representação desprotegida.
Nos estágios intermediários da construção, as regras de otimização de código são aplicadas várias vezes, sendo
que esses processos de otimização dependem uns dos outros.
Depois de passar pela face, várias árvores de análise são geradas. Neste ponto, o gerador de código converte de
imediato em endereçamento direto por meio do registrador de endereços.
Todos os geradores de código têm muito em comum, e os principais algoritmos utilizados diferem, via de regra,
apenas em detalhes relacionados à geração de saída.
Leia o texto a seguir:
 
O registro do tipo de cada identificador de variável é realizado durante a análise de um bloco de
declarações. Nessa altura é criada uma entrada na tabela de símbolos e registrado o tipo associado
à variável. Quando a definição de uma função é analisada, cria-se uma entrada na tabela dos
A+
A
A-

Pergunta 5 0,2 pts
símbolos com o identificador da função como chave. Deve-se associar o tipo de retorno e memorizar
o tipo de cada parâmetro.
 
Fonte: SANTOS, P. R.; LANGLOIS, T. Compiladores - Da Teoria à Prática. São Paulo. Grupo GEN,
2018.
 
Considere o texto acima para analisar as seguintes afirmações:
 
I. Podemos dizer que um identificador permite criar regras específicas e estas independam todas
de um identificador comum.
II. Um identificador se comporta da mesma maneira, conforme apareça em uma declaração ou na
chamada de uma função.
III. É fato que um identificador não pode ser uma palavra-chave devido as palavras-chave serem de
ordem reservadas.
 
É correto o que se afirma em:
II e III, apenas.
III, apenas.
I, apenas.
I, II e III.
I e III, apenas.
Leia o texto a seguir:
 
O código de três endereços é uma sequência de instruções no formato x := y op z, onde x, y e z são
nomes, constantes ou objetos temporários gerados pelo compilador. Aqui, op é uma operação de
dois lugares, como ponto flutuante ou aritmética fixa, booleana ou bit a bit. O lado direito pode conter
apenas um sinal da operação.
A+
A
A-
Salvo em 17:07 
Os objetos temporários são objetos que não possuem nomes no código e são criados implicitamente
pelo compilador em alguns casos. Considerando isso, avalie as afirmações a seguir:
 
I. Quase todas as linguagens são capazes de criar automaticamente variáveis temporárias para
resultados intermediários de tipos simples.
II. Durante a chamada de uma função, o arquivo temporário apresenta uma forma de alocação de
dados, chamado de registro de desativação.
III. Ao executar o código, o interpretador usa os valores do contador do programa, receptor, literais e
variáveis temporárias.
IV. É recomendável usar ponteiros ou referenciar partes de um objeto temporário, pois não há riscos
de ir para o lixo.
 
É correto o que se afirma apenas em:
I e III, apenas.
II, III e IV, apenas.
I e II, apenas.
II e III, apenas.
I, II e IV, apenas.
Enviar teste
A+
A
A-

Continue navegando