Baixe o app para aproveitar ainda mais
Prévia do material em texto
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 convertidoem linguagem de máquina; E A maior parte de todas as linguagens formais, utilizadas para a programação de computadores dispensa o uso de analisadores sintáticos. Questão 8/10 - 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? 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.
Compartilhar