Logo Passei Direto
Buscar

Ferramentas de estudo

Mês do Cliente Passei Direto

Quer receber 70% de desconto para assinar o PasseIA?

Questões resolvidas

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 tarefa de um gerador de código é criar um programa em 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.
A geração de código inclui várias subtarefas específicas e relativamente independentes. Obviamente, a independência dessas subtarefas é relativa.
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.
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.

Material
páginas com resultados encontrados.
páginas com resultados encontrados.

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Escolha uma das opções e acesse esse e outros materiais sem bloqueio. 🤩

Cadastre-se ou realize login

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

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 tarefa de um gerador de código é criar um programa em 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.
A geração de código inclui várias subtarefas específicas e relativamente independentes. Obviamente, a independência dessas subtarefas é relativa.
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.
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.

Prévia do material em texto

Pergunta 1
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.
  
Dependendo da linguagem escolhida, a tabela de caracteres pode servir a qual propósito?
Grupo de escolhas da pergunta
( ) Mapear nomes lidos pelo compilador para suas informações correspondentes.
( ) Armazenar informações do código hash do objeto durante o processo de compilação.
( ) Armazenar os nomes de todas as entidades de forma estruturada em vários locais de acordo com a estrutura.
( ) 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.
Pergunta 2
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.
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:
 
Quase todas as linguagens são capazes de criar automaticamente variáveis temporárias para resultados intermediários de tipos simples.
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.
Ao executar o código, o interpretador usa os valores do contador do programa, receptor, literais e variáveis temporárias.
É 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:
Grupo de escolhas da pergunta
( ) I e III, apenas.
( ) II, III e IV, apenas.
( ) I, II e IV, apenas.
( ) I e II, apenas.
( ) II e III, apenas.
Pergunta 3
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.
Grupo de escolhas da pergunta
( ) 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.
( ) A geração de código inclui várias subtarefas específicas e relativamente independentes. Obviamente, a independência dessas subtarefas é relativa.
( ) 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.
( ) 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.
Pergunta 4
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:
( ) Grupo de escolhas da pergunta
( ) 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.
( ) As asserções I e II são ambas proposições falsas.
( ) 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.
Pergunta 5
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 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:
Grupo de escolhas da pergunta
( ) I, apenas.
( ) I e III, apenas.
( ) III, apenas.
( ) II e III, apenas.
( ) I, II e III.
Pergunta 1 
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. 
 
Dependendo da linguagem escolhida, a tabela de caracteres pode servir a qual 
propósito? 
 
Grupo de escolhas da pergunta 
( ) Mapear nomes lidos pelo compilador para suas informações correspondentes. 
( ) Armazenar informações do código hash do objeto durante o processo de compilação. 
( ) Armazenar os nomes de todas as entidades de forma estruturada em vários locais de 
acordo com a estrutura. 
( ) Criar símbolos predefinidos após o processo decompilação para guardar informações 
dos nomes. 
( ) Implementar novas atribuições e expressões no código-fonte que sejam 
semanticamente incorretas.

Mais conteúdos dessa disciplina