COMPILADORES E COMPUTABILIDADE
Por: rildon • 27/11/2015 • Exam • 2.320 Palavras (10 Páginas) • 3.992 Visualizações
ASSOCIADAS
Código da Prova: 25897906
Curso: Ciência da Computação
Série ou Período: 2º Bimestre - 7º Semestre
Tipo: NP2
I - Questões objetivas – valendo 10,00 pontos
Gerada em: 16/11/2015 12:03:37
Campus:_______________________________________________ Turma: CC7P34
Nome:_________________________________________________ Matrícula:____________
Assinatura:___________________________________________ Data:_________________
----------------------------------------------------------------------------------------------------------------------------
Questões de múltipla escolha
Disciplina: D571 - Compiladores e Computabilidade
Questão 1: 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õem o programa. A 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 dos módulos. Tendo em mente essas atribuições, é incorreto afirmar que cabe ao linker:
RESPOSTA = E
A)Construir uma tabela com todos os módulos-objeto e registrar seus respectivos comprimentos.
B)Atribuir um endereço de carga a cada módulo-objeto, que identificará sua posição dentro do módulo de carga.
C)Relocar todas as instruções que contêm um endereço, adicionando ao seu endereço uma constante de relocação (que é o endereço inicial de cada módulo).
D)Encontrar todas as instruções que referenciam outros procedimentos e inserir nelas o endereço absoluto dos mesmos.
E)Copiar o módulo de carga para a memória principal, preparando o programa para a sua execução.
Questão 2: Um processo algorítmico tem o objetivo de instruir o executor quanto às ações que deve realizar e à sua sequência. Para que isso ocorra é necessário que as instruções sejam dadas num formato compreensível àquele que as realizará. A programação de computadores é feita descrevendo o algoritmo em instruções de uma linguagem de programação e que, quando ditas de alto nível, apresentam características mais próximas à estrutura das linguagens humanas do que a das máquinas. Analise as alternativas a seguir e assinale a que julgar incorreta.
A)Quando a linguagem de codificação do algoritmo é de alto nível, precisamos de um compilador para que o algoritmo original seja traduzido para um equivalente dado em linguagem de baixo nível.
B)A construção de compiladores envolve conhecimentos relativos à estrutura da linguagem e à capacidade de tradução de uma para outra, preservando fielmente cada uma das funcionalidades descritas no código-fonte.
C)O uso de métodos formais permite tanto a especificação das linguagens de programação quanto a implementação de reconhecedores para suas estruturas, compreendendo, assim, os fundamentos teóricos para o estudo e a construção de compiladores.
D)Os conhecimentos relacionados à construção de compiladores encerram-se estritamente nesta atividade, oferecendo pouco ou mesmo nenhuma possibilidade de aplicação em outras áreas que não seja a tradução para a linguagem de máquina.
E)A compreensão das estruturas de uma linguagem e dos processos que envolvem a sua interpretação permitem que tais conhecimentos sejam aplicados não apenas na construção de compiladores, mas na interpretação de documentos estruturados, como as páginas da web; parâmetros em linhas de comandos ou padrões de endereços na web, por exemplo.
Questão 3: Um analisador sintático LL(1) somente pode ser construído para uma classe restrita de gramáticas, que também recebem esse mesmo nome. Uma de suas características é que suas produções não apresentam prefixos comuns para cadeias distintas derivadas a partir de um mesmo não terminal. Ou seja, se duas produções que começam com o mesmo símbolo ou conjunto de símbolos (prefixo), por exemplo, como nas regras [pic 1]e sendo [pic 2]implicará numa interseção entre os conjuntos [pic 3]e o analisador não será capaz de decidir qual regra escolher utilizando um único símbolo da entrada. Usualmente o problema pode ser resolvido substituindo as produções da gramática que causam o problema por outras que acomodem essa restrição, mantendo a equivalência entre elas. Supondo a produção [pic 4]e considerando [pic 5] como a sentença vazia, quais, dentre as alternativas a seguir, representa uma substituição válida para resolver o problema apresentado e obter uma gramática equivalente que seja LL(1)?.
RESPOSTA = A
A)[pic 6]
B) [pic 7]
C)[pic 8]
D) [pic 9]
E) [pic 10]
Questão 4: A respeito dos Carregadores (Loaders) é incorreto afirmar:
RESPOSTA = E
A) Avaliar a quantidade de memória necessária ao programa e solicitá-la ao SO.
B) Copiar o programa para a memória principal e preparar sua execução.
C) Ajustar os endereços do código executável de acordo com a posição base de carregamento.
D) Resolver os endereços de código dinamicamente em situações de swapping, pois os processos não necessariamente retornam a mesma posição.
E) Reunir os módulos objeto em um único elemento chamado de módulo absoluto de carga.
Questão 5: Aspectos como a obrigatoriedade de declaração antes do uso, compatibilidade de tipos durante atribuições ou mesmo a adequação às 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:
...