Buscar

Apol 5 Compiladores nota 60

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

Prévia do material em texto

Apol 5 Compiladores – NOTA 60
Questão 1/5 - Compiladores
A geração do código intermediário, ou código objeto, encerra o processo de compilação no que diz respeito ao código original. Nesta fase, o código originado do analisador semântico é submetido a algumas rotinas de otimização visando melhorar o tempo de execução, o uso de memória e o consumo de energia. Neste processo, o código é representado em uma notação próxima da linguagem Assembly mas, ainda independente da máquina. Qual das afirmativas a seguir está correta com relação a esta fase do processo de compilação?
Nota: 20.0
	
	A
	É na fase de otimização independente de máquina que o compilador torna o código mais eficiente para uso na arquitetura x86.
	
	B
	Na fase de otimização, independente de máquina, o código é otimizado removendo-se todos os laços do programa de forma que não exista nenhum branch.
	
	C
	O uso do 3opCode é recomendado já que este código é bem próximo do Assembly e a conversão acaba sendo mais simples.
Você acertou!
	
	D
	Na fase de otimização o compilador busca encontrar os últimos erros de sintaxe que existem no código.
	
	E
	A parte mais importante do processo de otimização independente é o reconhecimento das funções de endereçamento específicas da arquitetura visada que tornarão o código mais rápido.
Questão 2/5 - Compiladores
No módulo de análise sintática, utilizamos a definição de uma gramática livre de contexto, como base para o processo de análise. Notadamente por que, neste caso, estamos interessados com a forma das declarações e não com o seu significado. No caso da análise semântica isto não é verdade já que um conjunto significativo de erros podem ser detectados no analisador semântico se ele for capaz de entender o sentido das declarações e operações. Entre as afirmações a seguir indique aquela que é verdadeira.
Nota: 20.0
	
	A
	Erros de compatibilidade de tipos não são importantes para o analisador semântico;
	
	B
	A verificação de variáveis e declarações em relação ao escopo de cada bloco de código é função do analisador sintático;
	
	C
	A duplicidade de declarações de variáveis faz parte das funções do analisador semântico;
Você acertou!
	
	D
	Sem o analisador semântico o compilador não seria capaz de detectar nenhum erro de digitação;
	
	E
	A tabela de símbolos, muito importante nas análises léxica e sintática não tem função na análise semântica.
Questão 3/5 - Compiladores
Criar o diagrama de fluxo no em 3opCode permite a detecção dos blocos básicos de código. Estes blocos servem como base do processo de otimização. Todos eles começam na chegada de um branch e terminam em um jump e são compostos de código que será sempre executado na mesma ordem. Estes blocos são importantes por que...
Marque a alternativa que completa esta definição.
Nota: 0.0
	
	A
	Permitem a análise sintática do código.
	
	B
	Toda e qualquer alteração feita dentro do bloco não impacta no algoritmo.
	
	C
	Toda e qualquer alteração feita entre blocos não impacta no algoritmo.
	
	D
	As alterações realizadas entre blocos aprimoram a análise semântica e permitem a correção automática de tipos.
	
	E
	Linguagens orientadas a objetos usam estes blocos para codificar os métodos mais utilizados.
Questão 4/5 - Compiladores
Os erros que devem ser verificados pelo analisador semântico, notadamente os que são relacionados com o escopo das variáveis devem incluir a verificação de argumentos e tipos de funções. Os tipos podem ser verificados pela análise de retorno das funções, no caso da linguagem C por exemplo. Neste caso, tudo que é necessário é garantir que a declaração da função coincide com o que ela retorna. Já no caso dos argumentos de uma função, este processo é um pouco mais complicado por que requer, além da verificação do protótipo da função, ou assinatura, a verificação de todas a chamadas a essa função. Neste caso, considerando as afirmativas a seguir, marque a alternativa errada.
Nota: 0.0
	
	A
	Uma das deficiências da linguagem C está na definição do tipo array que não inclui uma regra de verificação de limites, passando para o programador a responsabilidade sobre a verificação destes limites mesmo quando estes arrays são argumentos de uma função;
	
	B
	Métodos de classes, em linguagens orientadas a objetos não precisam que o analisador semântico observe a consistência dos seus argumentos. A exceção a esta regra é o constructor;
	
	C
	A verificação de argumentos de funções, em todas as chamadas, deve incluir, obrigatoriamente, a verificação dos tipos destes argumentos;
	
	D
	No caso dos argumentos de funções, a verificação de tipos destes argumentos pelo analisador semântico pode produzir uma conversão automática de tipos ou um erro;
	
	E
	Além dos tipos, relativos aos argumentos, o analisador semântico deve se preocupar também com a ordem destes argumentos.
Questão 5/5 - Compiladores
O processo de verificação de tipos torna-se mais importante quando consideramos que, em muitas linguagens de programação, existem tipos complexos e tipos compostos. No caso de tipos compostos como um array ou uma struct, caberá ao analisador semântico a análise dos tipos agregados. Há ainda de se considerar a possibilidade de criação de novos tipos, compostos ou complexos, de acordo com a necessidade do programador. Assim, caberá ao analisador semântico, analisar, por exemplo, um tipo struct criado para atender as necessidades específicas de um programa da mesma forma que ele avalia um tipo inteiro ou real. Com relação a verificação de tipos, qual das afirmativas a seguir é incorreta?
Nota: 20.0
	
	A
	A checagem estática de tipos é feita em tempo de compilação, como é o caso da linguagem C, quando compilada;
	
	B
	A checagem de tipos dinâmica é feita em tempo de execução, como é o caso da linguagem PHP, quando interpretada;
	
	C
	Linguagens de programação podem exigir a definição de tipo para cada variável ou estrutura de dados composta ou, podem determinar estes tipos em tempo de execução, dependendo de escolhas realizadas na definição da linguagem;
	
	D
	A definição de tipos complexos, como listas e pilhas, independe da linguagem de programação e, como tal, estes tipos podem ser verificados por qualquer analisador semântico;
Você acertou!
	
	E
	Ainda que tipos complexos e compostos tornem o processo de análise semântica mais complexo e demorado, as funcionalidades que são agregadas as linguagens de programação por estes constructors torna sua utilização indispensável.

Outros materiais