Buscar

COMPILADORES E COMPUTABILIDADE D571_13701_R_20202

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

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 6, do total de 8 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

· Pergunta 1
0,5 em 0,5 pontos
	
	
	
	Para o desenvolvimento de um compilador é possível que se adote um dos diferentes modelos de construção. Um destes é o que chamamos de modelo de múltiplas passagens, em que as atividades relacionadas a tradução e a escrita do código alvo são realizadas em etapas encadeadas. Cada fase realiza sua tarefa percorrendo todo o código fonte e, após uma conclusão bem-sucedida, inicia-se a etapa subsequente tendo como entrada o resultado da fase anterior. Acerca deste modelo analise as seguintes considerações.
- Trata-se de um modelo bastante didático, pois a modularização do processo permite o desenvolvimento gradativo do compilador enquanto se estuda com mais detalhes as atividades pertinentes a cada etapa.
- Por outro lado, uma desvantagem inerente ao modelo é que por exemplo um erro semântico localizado nas primeiras linhas do código fonte somente seria detectado após a conclusão das análises léxica e sintática de todas as linhas do programa.
Assinale a alternativa que representa o melhor juízo cabível sobre o que se afirmou.
	
	
	
	
		Resposta Selecionada:
	a. 
Ambas as assertivas são verdadeiras, sendo a segunda a justificativa da primeira.
	
	
	
· Pergunta 2
0,5 em 0,5 pontos
	
	
	
	Os métodos ligados a análise sintática se agrupam em ascendentes e descendentes, de acordo com a forma como derivam a estrutura sintática da sentença do programa. Assinale a alternativa incorreta a respeito dos analisadores sintáticos.
	
	
	
	
		Resposta Selecionada:
	d. 
Dentre a categoria de analisadores descendentes podemos citar os parses Descendentes Recursivos, de Cocke‐Younger‐Kasami e os analisadores do tipo LR(k).
	
	
	
· Pergunta 3
0,5 em 0,5 pontos
	
	
	
	Durante a varredura do código fonte pelo Scanner (Analisador Léxico) várias tarefas ditas secundárias são realizadas. Assinale a alternativa cuja tarefa não corresponde as atribuições esperadas para um analisador léxico.
	
	
	
	
		Resposta Selecionada:
	e. 
Detectar os marcadores de início e de fim de blocos para que os comandos possam ser agrupados em um único elemento e entregues para a fase de análise sintática com um comando único. 
	
	
	
· Pergunta 4
0,5 em 0,5 pontos
	
	
	
	O processo de programar um computador para realizar uma determinada tarefa, quando analisado em relação às atividades que são necessárias desde a codificação do algoritmo até a execução propriamente dita do programa, pode ser visto como um processo complexo e que envolve vários elementos, cada qual com propósito bastante específico. Nesse contexto, assinale a alternativa que descreve o propósito e a principal tarefa realizada pelos compiladores.
	
	
	
	
		Resposta Selecionada:
	b. 
Possibilitar a programação de computadores utilizando linguagens de alto nível (que permitem descrever as ideias em termos mais abstratos e mais independentes da arquitetura da máquina), pois são responsáveis pela tradução do algoritmo em seu correspondente em um linguagem de baixo nível.
	
	
	
· Pergunta 5
0,5 em 0,5 pontos
	
	
	
	 
A gramática dada a seguir é LL(1). Nela os elementos +, *, (, ) e id configuram como símbolos terminais, enquanto os E, T, F, E’ e T’ são considerados não-terminais. A tabela de movimentos M fornece ao reconhecedor o número da regra que deve ser aplicada durante a análise da sentença, sendo necessário apenas conhecer o não-terminal a ser derivado e o primeiro símbolo presente no restante da entrada.
Sobre a construção de analisadores sintáticos deste tipo é incorreto afirmar que:
	
	
	
	
		Resposta Selecionada:
	d. 
A aplicação da regra 8 deve ser feita antes da regra 7, segundo a interpretação que temos da tabela. Esse fato se comprova ao observarmos que o símbolo “(“ poderia ocorrer imediatamente após um “id” segundo o que determina as produções da gramática.
	
	
	
· Pergunta 6
0,5 em 0,5 pontos
	
	
	
	 Analisadores sintáticos do tipo LL(k) realizam a verificação da sentença de modo descendente, entretanto tem como restrição poderem ser aplicados apenas aos casos em que a gramática da linguagem é LL(k). Considerando a produção S → S x K | K qual, dentre as alternativas a seguir, poderia substituí-la de modo a eliminar a recursão a esquerda e criar uma gramática equivalente? (Considere ε representando a sentença vazia).
	
	
	
	
		Resposta Selecionada:
	e. 
	
	
	
· Pergunta 7
0,5 em 0,5 pontos
	
	
	
	No modelo de Análise e Síntese o processo é dividido em duas grandes etapas. Na primeira, são realizadas todas as tarefas pertinentes a análise e compreensão do código fonte, enquanto na segunda, as atividades de otimização e a geração do código propriamente dito. Cada uma destas grandes etapas pode ser decompostas em fases, de propósito específico e cujo resultado de seu processamento servirá como dado de entrada para a próxima fase. Analise as alternativas a seguir e assinale aquela cuja atividade não corresponde a nenhuma das subfases deste modelo.
	
	
	
	
		Resposta Selecionada:
	e. 
A fase de link edição, ou ligação, é responsável por criar o arquivo executável combinando todos os arquivos objetos em um único módulo de carga.
	
	
	
· Pergunta 8
0,5 em 0,5 pontos
	
	
	
	Durante o processo de verificação da estrutura sintática de um programa, o analisador simula o processo de construção da árvore de derivação para o programa que está sendo compilado. Usualmente esse processo é realizado adotando-se uma dentre duas abordagens possíveis. a top-down, em que se parte do símbolo inicial da gramática e tenta-se alcançar os elementos que compõe o programa; e a botton-up, que segue o princípio contrário, partindo do código e realizado reduções na sentença até que se alcance o símbolo inicial que caracterize o elemento raiz da árvore. A respeito destas estratégias assinale a alternativa correta.
	
	
	
	
		Resposta Selecionada:
	a. 
Os métodos descendentes são usualmente mais convenientes em casos de implementação manual, enquanto os métodos ascendentes (botton-up) são considerados mais favoráveis para construtores automáticos de analisadores.
	
	
	
· Pergunta 9
0,5 em 0,5 pontos
	
	
	
	Os diferentes elementos básicos que compõe uma linguagem, tais como as palavras reservadas, identificadores, operadores e quaisquer outros lexemas estabelecidos por ela, também possuem uma estrutura sintática e podem ser descritos formalmente através de expressões regulares. Entretanto a tarefa de reconhecimento dos lexemas é realizada pelo Analisador Léxico, acontecendo de maneira separada da Análise Sintática do código.
Assim, um analisador léxico é antes de mais nada um elemento reconhecedor destas estruturas e pode ser definido como um autômato finito, dada a natureza regular dos elementos da linguagem.
Julgue cada uma das afirmativas a seguir e assinale a alternativa correta.
I) As gramáticas regulares não permitem a descrição de estruturas aninhadas e portanto não são capazes de descrever simultaneamente os lexemas e também as demais estruturas típicas nas linguagem de programação, tais como parênteses balanceados e comandos aninhados.
II) A separação das etapas permite utilizar gramaticas regulares, que são mais simples e mais eficientes, para a descrição dos lexemas tornado a implementação do reconhecedor mais fácil.
III) O analisador sintático ficaria muito mais complexo, pois estaria a todo momento preocupado em prever a ocorrência de símbolos irrelevantes, tais como espaços em branco, que teriam sido eliminados pela análise léxica.
	
	
	
	
		Resposta Selecionada:
	e. 
Todos itens são verdadeiros e os motivos apresentados justificam a separação dos analisadores.
	
	
	
· Pergunta 10
0,5 em 0,5 pontos
	
	
	
	Um analisador sintático descendente constrói a árvore de derivação do programa de cima para baixo, isto é, partindo da raiz (símbolo inicial da gramática) e seguindo em direção as folhas (símbolos do programa). Todos os métodos que adotam esta estratégia seguem esta abordagem, variando pontualmente a forma como resolvem o problema de selecionar a regra a ser aplicada em cada momento. Pode-seafirmar sobre o Analisador Descendente Recursivo:
	
	
	
	
		Resposta Selecionada:
	a. 
É um reconhecedor obtido através da transcrição das regras de produção da gramática na forma de um conjunto de sub-rotinas. Assim, cada sub-rotina é responsável por verificar os elementos relativos a uma produção em particular. O processo de reconhecimento se inicia com a chamada da sub-rotina equivalente a regra que deriva o símbolo inicial da gramática. A partir disto, chamadas subsequentes para outras sub-rotinas são realizadas sempre que um símbolo não terminal é encontrado na produção. Quando todos os elementos são consumidos, a chamada inicial retorna sinalizando que se trata de uma sentença é válida.
	
	
	
· Pergunta 1
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 2
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 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
	
	
	
	A sintaxe geralmente é definida por uma Gram. Livre de Contexto, mas estas não são capazes de descrever aspectos sobre a compatibilidade de tipos ou regras de escopo de identificadores. Analise as informações a seguir e assinale a alternativa correta.
I) Uma Gramática de Atributos é uma gramática livre de contexto estendida com regras de cálculo e/ou ações semânticas de modo a fornecer sensitividade ao contexto através de elementos chamados de atributos, que estão associados aos símbolos terminais e não terminais utilizados na regra de produção.
II) Um atributo é qualquer propriedade da estrutura da linguagem que se deseja quantificar ou caracterizar, como por exemplo, o tipo e o escopo das variáveis, valores de expressões, etc.
III) O valor dos atributos é estabelecido tomando como base a árvore sintática explícita do programa e podem ser calculados tanto em tempo de compilação quanto em tempo de execução, de acordo com a propriedade que representam.
 
	
	
	
	
		Resposta Selecionada:
	e. 
Todos itens são verdadeiros.
	
	
	
· Pergunta 5
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.
 
	
	
	
	
		Resposta Selecionada:
	e. 
Todos itens são verdadeiros.
	
	
	
· Pergunta 6
0,5 em 0,5 pontos
	
	
	
	São tarefas de responsabilidade de um montador Assembler:
I - A substituição dos mnemônicos pelos opcodes numéricos do conjunto ISA (Instruction Set of Architecture), seguindo uma tabela de associações que relaciona o mnemônico com a instrução-alvo.
II - A substituição dos endereços simbólicos que representam destinos de saltos e constantes por endereços numéricos, determinando de maneira absoluta ou relativa em termos do registrador PC (Program Counter) o endereço de destino dos rótulos.
III - Reservar espaço na memória para armazenamento de dados de acordo com o tipo associado a cada variável declarada no programa.
IV - Gerar constantes em memória para variáveis e constantes, determinando o valor associado ao modo de endereçamento do operando.
 
	
	
	
	
		Resposta Selecionada:e. 
Todos itens são verdadeiros.
	
	
	
· Pergunta 7
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 8
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 9
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 10
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.

Outros materiais