Prévia do material em texto
Revisar envio do teste: QUESTIONÁRIO UNIDADE II COMPILADORES E COMPUTABILIDADE D571_13701_R_20192 CONTEÚDO Usuário LUAN GABRIEL MAZALI SILVA Curso COMPILADORES E COMPUTABILIDADE Teste QUESTIONÁRIO UNIDADE II Iniciado 30/10/19 13:34 Enviado 30/10/19 17:24 Status Completada Resultado da tentativa 4 em 5 pontos Tempo decorrido 3 horas, 49 minutos Resultados exibidos Respostas enviadas, Perguntas respondidas incorretamente Pergunta 1 Resposta Selecionada: b. A tabela de símbolos é uma estrutura de dados que tem por propósito armazenar todos os nomes declarados pelo programador juntamente com os seus respectivos atributos. É considerada fundamental para o processo de compilação, pois participa de várias etapas do processo inclusive para a geração de código. Durante a análise semântica o compilador busca nesta tabela as informações sobre os identi�cadores que participam de suas análises, como por exemplo, para recuperar os tipos dos identi�cadores envolvidos no cálculo de uma expressão com o propósito de veri�car a compatibilidade entre eles. Sobre a tabela de símbolos e a análise semântica é incorreto a�rmar que: Os tipos declarados pelo programador estendem os elementos básicos da linguagem, permitindo a de�nição de variáveis que estão além dos tipos primitivos oferecidos por ela. Desta forma, em uma linguagem de programação orientada a objetos, o analisador semântico desempenha um papel mais complexo uma vez que é responsável também pelas veri�cações de compatibilidade entre classes derivadas e pela resolução do escopo no caso da reescrita de métodos. Pergunta 2 Resposta Selecionada: e. A respeito dos Carregadores ( Loaders) é incorreto a�rmar: Reunir os módulos objeto em um único elemento chamado de módulo absoluto de carga. UNIP BIBLIOTECAS MURAL DO ALUNOCONTEÚDOS ACADÊMICOS 0 em 0,5 pontos 0,5 em 0,5 pontos LUAN SILVA Pergunta 3 Resposta Selecionada: e. A sintaxe geralmente é de�nida 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 identi�cadores. 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 quanti�car 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. Todos itens são verdadeiros. Pergunta 4 Resposta Selecionada: c. A tabela de movimentos de um analisador LR(1) é construída a partir de um autômato de pilha, cujos estados representam o processo de derivação do programa em relação a gramática de linguagem. As diferentes posições da tabela informam ao analisador qual a operação (empilhamento, redução ou aceitação) deve ser realizada em cada instante do processo de análise, tomando como referência apenas o estado corrente e o símbolo (token) dado na entrada. Acerca desta tabela e de sua construção, analise cada uma das a�rmativas a seguir e selecione a alternativa correta. I - A operação de empilhamento equivale a retirada do símbolo da entrada e sua inserção na pilha para processamento. A célula da tabela equivalente a esta ação é dada pelo número correspondente ao estado que o autômato assume após a transição. II - Durante uma ação de redução, os símbolos (estados) equivalentes a cadeia derivada, são retirados da pilha e substituídos pelo não-terminal que os origina, realizando assim o processo inverso ao da derivação pela regra em questão. Na tabela essa ação é colocada em cada célula cuja linha corresponde ao estado que contém a regra completada e as colunas correspondentes aos símbolos pertencentes ao conjunto de seguidos (Follow) do não-terminal associado à regra. III - A aceitação da cadeia ocorre quando encontramos uma ocorrência do símbolo inicial da gramática. Desta forma, preenchemos a coluna correspondente ao símbolo inicial com esta ação para todas as linhas da tabela. Os itens I e II são verdadeiros. Pergunta 5 Um analisador sintático dito ascendente é aquele que processa a cadeia de entrada e constrói sua árvore de derivação de baixo para cima, ou seja, partindo dos símbolos do programa (as folhas da árvore) em direção ao símbolo inicial da gramática (raiz). A esse respeito analise cada uma das a�rmativas a seguir e marque a alternativa correta. I - Por conta de sua forma peculiar de construção da árvore, os passos executados pelo 0,5 em 0,5 pontos 0,5 em 0,5 pontos 0,5 em 0,5 pontos Resposta Selecionada: c. analisador correspondem ao processo de derivação conhecido como mais à direita ( right-most) invertido. O processo mais à direita é aquele em que sempre derivamos o símbolo não-terminal mais à direita antes dos demais. E é dito invertido para que a entrada possa ser processada de maneira natural, isto é, a leitura dos símbolos de entrada sendo feito do início para o �m do arquivo. II - Analisadores deste tipo realizam duas operações básica: de empilhamento (ou deslocamento) de s, em que o símbolo da entrada s é colocado na pilha; e a operação de redução pela regra A→α, em que os símbolos correspondentes a cadeia α são retirados da pilha e substituídos pelo não-terminal A. III - A validação do programa acontece quando o analisador processa todos os símbolos da entrada e alcança o �m de arquivo, independentemente do conteúdo da pilha de controle do processo. Este momento é conhecido como validação por entrada vazia. Apenas os itens I e II são verdadeiros. Pergunta 6 Resposta Selecionada: e. 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 a�rmar que cabe ao Linker: Copiar o módulo de carga para a memória principal, preparando o programa para a sua execução. Pergunta 7 Resposta Selecionada: e. 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 a�rmativas 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 �nais 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 de�nitiva. III - Permitir uma compilação portável para diferentes arquiteturas e sistemas operacionais independente de qual seja a linguagem fonte. Todos itens são verdadeiros. 0,5 em 0,5 pontos 0 em 0,5 pontos Pergunta 8 Resposta Selecionada: e. A memória é um recurso controlado pelo sistema operacional e um programa não deve ter posições de memória �xas e pré-estabelecidaspara 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 su�ciente 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 a�rmativas 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, de�nido, ocorre em outro segmento (descrito como uma referência externa), ou ainda, quando um símbolo é de�nido neste segmento e poderá ser referenciado em outro segmento (descrito como uma de�niçã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 de�nições locais ou a de�niçõ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. Todos itens são verdadeiros. Pergunta 9 Resposta Selecionada: e. A respeito da de�nição e tarefas dos Montadores ( Assemblers), Ligadores ( Linkers) e Carregadores ( Loaders) analise as a�rmativas 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. Todos itens são verdadeiros. Pergunta 10 0,5 em 0,5 pontos 0,5 em 0,5 pontos 0,5 em 0,5 pontos Quarta-feira, 30 de Outubro de 2019 17h24min26s BRT Resposta Selecionada: e. Em uma Gramática de Atributos podemos classi�car 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 de�nições não providenciem quaisquer regras semânticas, apenas ações para a geração de código. Todos itens são verdadeiros. ← OK