A maior rede de estudos do Brasil

Grátis
7 pág.
Atividade Pratica Compiladores

Pré-visualização | Página 1 de 2

90% de acerto (dúvida nas questões 3 e 5) 
Questão 1/10 - Compiladores 
O processo de compilação não é estático e, ao longo das últimas décadas, tem evoluído de forma quase 
contínua. Uma das tecnologias mais promissoras do começo do século XXI está no projeto conhecido 
como LLVM (Low Level Virtual Machine) que consiste em uma tentativa de criar compiladores, mas 
flexíveis, rápidos e eficientes. Considerando o processo de compilação monolítico, comparado com o 
processo do LLVM, marque a alternativa correta. 
 
A O LLVM, apesar de utilizar uma arquitetura modular, não permite que o código objeto 
criado (bytecode) possa ser otimizado para arquiteturas diferentes; 
 
B Em um processo monolítico de compilação, tudo que precisamos fazer para gerar 
código para arquiteturas diferentes é reescrever os analisadores sintático, léxico e 
semântico; 
 
C A grande vantagem do processo monolítico é justamente a tabela de símbolos, que 
permite a geração de código para diversas arquiteturas para um mesmo processo de 
otimização; 
 
D O LLVM, apesar de ser modular, não permite a criação de módulos diferentes para as 
mesmas linguagens de programação. Ou seja, o programador terá que se contentar 
com o otimizador de código disponível para a linguagem que utiliza; 
 
E O LLVM, utiliza uma arquitetura modular permitindo que o código gerado em uma 
linguagem de programação possa ser compilado para diversas arquiteturas, 
praticamente ao mesmo tempo já que o código objeto gerado é independente da 
arquitetura alvo. 
 
Questão 2/10 - Compiladores 
Antes da geração do código executável, o programa que será executado em uma determinada 
arquitetura, o compilador realiza uma otimização de código específica para a arquitetura visada. Neste 
momento, a otimização específica, ou dependente da máquina, o código oriundo do módulo de geração 
de código é, finalmente, adequado a máquina onde será executado. Considerando esta última fase, qual 
das afirmações a seguir está errada. 
 
A É na fase de geração de código executável, logo após a otimização que o código é 
encapsulado no formato exigido pelo sistema operacional. 
 
B A otimização específica para uma arquitetura permite que o código executável utilize da 
melhor forma possível todos os recursos da máquina. 
 
C Ainda que o código seja otimizado várias vezes e de formas diferentes, não é possível 
afirmar que o programa resultante é perfeito. 
 
D O código executável, gerado na última fase da compilação contém a tabela de símbolos 
criada durante todo o processo de compilação. 
 
E No processo de compilação existe pelo menos uma fase de eliminação de código morto. 
 
Questão 3/10 - Compiladores Duvida 
O analisador semântico verifica o sentido das frases, definidas na árvore sintática pelo analisador 
sintático. Com esta análise é possível identificar erros como a duplicidade na definição de variáveis ou 
a inexistência de um determinado parâmetro de uma função determinada. Estes erros são, em geral, 
reportados ao programador para que ele possa corrigi-los. Porém, alguns erros, como certos erros de 
tipos podem ser automaticamente resolvidos pelo compilador. A esse processo damos o nome de type 
casting. Com relação ao analisador semântico, marque a alternativa correta. 
 
A A análise semântica começa pela marcação das variáveis duplicadas na árvore sintática; 
 
B A análise semântica precede a análise léxica e fornece a esta os lexemas necessários; 
 
C Uma vez que todos os tipos sejam identificados é possível identificar onde será possível 
realizar o type casting; 
 
D Uma vez que todos os tipos sejam identificados é possível começar o processo de 
otimização de código voltado para a arquitetura alvo; 
 
E A análise semântica precede a análise sintática e fornece as informações de tipos 
necessárias a criação da árvore de lexemas; 
Questão 4/10 - Compiladores 
Dado o alfabeto Σ={1,0}Σ={1,0} identifique, nas opções a seguir, a máquina de estados finitos capaz de 
identificar strings binárias que representam números múltiplos de 2 e não de 4. 
 
A 
 
 
B 
 
 
C 
 
 
D 
 
 
E 
 
Questão 5/10 - Compiladores Duvida 
“Chamamos de programa ao resultado da transcrição da linguagem de programação em linguagem de 
máquina que está adequadamente formatado para ser executado em uma determinada máquina. Por 
outro lado, chamamos de código ao texto que você escreve para sequenciar os comandos que 
representam o algoritmo que você quer executar. ” Desta forma é fácil perceber que a função do 
compilador é transcrever o código, escrito em linguagem de alto nível, em código binário que possa ser 
executado em uma dada arquitetura. Já, no que diz respeito aos interpretadores, podemos afirmar que: 
Marque a alternativa errada. 
 
A Interpretadores são compiladores que não necessitam da geração de um arquivo 
contendo código intermediário ou código executável; 
 
B A principal função do interpretador é transcrever código, em linguagem de alto nível, em 
linguagem de máquina; 
 
C Os interpretadores ocupam um nicho específico de mercado onde não é necessário 
compartilhar o código executável; 
 
D Em ambientes que usam interpretadores, em última análise, o código deve ser transcrito 
todas as vezes que você desejar usar o programa; 
 
E Uma das diferenças entre compiladores e interpretadores está no fato que os 
compiladores podem alterar o código binário gerado de acordo com os dados digitados 
pelo usuário durante o uso do arquivo executável criado durante o processo de 
transcrição. 
 
Questão 6/10 - Compiladores 
Dificilmente você encontrará uma RegEx que não utiliza algum operador de repetição. A ideia 
principal desses operadores é permitir que você defina um padrão específico que você espera que 
ocorra um determinado número de vezes. Os operadores de repetição são: 
 
? determina que o que vier imediatamente antes dele deve aparecer 0 ou 1 vez na expressão; 
* determina que o que vier imediatamente antes dele deve aparecer 0 ou mais vezes na expressão; 
+ determina que o que vier imediatamente antes dele deve aparecer 1 ou mais vezes na expressão; 
{n} determina que o que vier antes dele deve ser repetido n vezes. 
Também será muito difícil encontrar uma expressão regular que não tenha pelo menos um caractere 
que seja excluído da análise. Para tal usamos a \ (contra-barra). Com esta informação selecione, entre 
as opções a seguir, a expressão regular capaz de identificar uma placa de carro no Brasil sabendo que a 
placa é formada de três letras maiúsculas, um hífen e um número inteiro de 4 dígitos. 
 
A [A - Z]{3}\-[0 - 9]{4}; 
 
B [AAA]\3\-[9999]\3; 
 
C {3} [A - Z]-{4} [0 - 9]; 
 
D [A - Z]*3-[0 - 9]*4; 
 
E [AAA]-[9999]; 
Questão 7/10 - Compiladores 
Em busca da eficiência na execução dos programas, ao longo do tempo, o processo de compilação 
ficou complexo e sujeito a erros e a tempos muito longos. Uma forma de tornar o processo de 
compilação mais eficiente foi a divisão deste processo em módulos dedicados. Assim, temos um 
módulo apenas para fazer a análise sintática do texto e outro apenas para entender o conteúdo 
semântico e assim sucessivamente. Quanto ao analisador sintático é verdadeiro dizer que: 
Marque a alternativa correta 
 
A O analisador sintático, apesar de fazer parte do processo de compilação, é totalmente 
dispensável e não altera o resultado final; 
 
B A principal função do analisador sintático é enviar os tokens necessários ao 
funcionamento do analisador Léxico; 
 
C O analisador sintático, para efetuar sua tarefa, organiza os tokens, enviados pelo 
analisador léxico em uma árvore; 
 
D A análise sintática só pode ser realizada depois que o seu código-fonte esteja convertido