Buscar

Apol 2 Compiladores 2021

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 6 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 6 páginas

Continue navegando


Prévia do material em texto

Questão 1/10 - Compiladores 
As gramáticas livres de contexto, utilizadas na definição de linguagens formais, para a 
criação de linguagens de programação definem, a partir de um conjunto de quatro 
elementos, todas as regras que determinam a linguagem. Essas regras podem ser 
expandidas pelo processo chamado de derivação. Sendo assim, marque a alternativa 
correta. 
Nota: 10.0 
 A 
A derivação consiste na substituição de um símbolo não terminal par uma regra 
de produção; 
 B 
A derivação consiste na substituição de um símbolo terminal por uma regra de 
produção; 
 C 
A derivação consiste na substituição de um símbolo não terminal por um 
símbolo terminal; 
 D 
A derivação consiste na substituição de uma regra de produção por um símbolo 
terminal; 
 E 
A derivação consiste na substituição de uma regra de produção por um símbolo 
não terminal. 
 
Questão 2/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? 
Nota: 10.0 
 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. 
 C 
O uso do 3opCode é recomendado já que este código é bem próximo do 
Assembly e a conversão acaba sendo mais simples. 
Você acertou! 
 D 
Na fase de otimização o compilador busca encontrar os últimos erros de sintaxe 
que existem no código. 
 E 
A parte mais importante do processo de otimização independente é o 
reconhecimento das funções de endereçamento específicas da arquitetura visada 
que tornarão o código mais rápido. 
 
Questão 3/10 - Compiladores 
Criar o diagrama de fluxo no em 3opCode permite a detecção dos blocos básicos de 
código. Estes blocos servem como base do processo de otimização. Todos eles 
começam na chegada de um branch e terminam em um jump e são compostos de código 
que será sempre executado na mesma ordem. Estes blocos são importantes por que... 
Marque a alternativa que completa esta definição. 
Nota: 10.0 
 A Permitem a análise sintática do código. 
 B 
Toda e qualquer alteração feita dentro do bloco não impacta no algoritmo. 
Você acertou! 
 C Toda e qualquer alteração feita entre blocos não impacta no algoritmo. 
 D 
As alterações realizadas entre blocos aprimoram a análise semântica e permitem 
a correção automática de tipos. 
 E 
Linguagens orientadas a objetos usam estes blocos para codificar os métodos 
mais utilizados. 
 
Questão 4/10 - Compiladores 
Os erros que devem ser verificados pelo analisador semântico, notadamente os que são 
relacionados com o escopo das variáveis devem incluir a verificação de argumentos e 
tipos de funções. Os tipos podem ser verificados pela análise de retorno das funções, no 
caso da linguagem C por exemplo. Neste caso, tudo que é necessário é garantir que a 
declaração da função coincide com o que ela retorna. Já no caso dos argumentos de uma 
função, este processo é um pouco mais complicado por que requer, além da verificação 
do protótipo da função, ou assinatura, a verificação de todas a chamadas a essa função. 
Neste caso, considerando as afirmativas a seguir, marque a alternativa errada. 
Nota: 10.0 
 A 
Uma das deficiências da linguagem C está na definição do tipo array que não 
inclui uma regra de verificação de limites, passando para o programador a 
responsabilidade sobre a verificação destes limites mesmo quando estes arrays 
são argumentos de uma função; 
 B 
Métodos de classes, em linguagens orientadas a objetos não precisam que o 
analisador semântico observe a consistência dos seus argumentos. A exceção a 
esta regra é o constructor; 
Você acertou! 
 C 
A verificação de argumentos de funções, em todas as chamadas, deve incluir, 
obrigatoriamente, a verificação dos tipos destes argumentos; 
 D 
No caso dos argumentos de funções, a verificação de tipos destes argumentos 
pelo analisador semântico pode produzir uma conversão automática de tipos ou 
um erro; 
 E 
Além dos tipos, relativos aos argumentos, o analisador semântico deve se 
preocupar também com a ordem destes argumentos. 
 
Questão 5/10 - Compiladores 
A análise semântica tem o objetivo de verificar a validade das declarações e operações 
contidas em um código de alto nível. Esta análise, entre outras coisas, verifica o tipo de 
cada declaração, operação, operando e variável em busca de inconsistências. Com isso 
em mente marque a alternativa incorreta entre as opções a seguir: 
Nota: 10.0 
 A 
A análise semântica é o último grande bloco antes da geração do código 
intermediário; 
 B 
A análise semântica indica o tipo das variáveis por meio de etiquetas colocadas 
na árvore sintática; 
 C 
Se for necessário, caberá ao processo de análise semântica a marcação das 
conversões automáticas de tipos; 
 D 
A determinação dos tipos depende do escopo da variável; 
Você acertou! 
A verificação de tipos independe do escopo das variáveis, declarações e 
operações. 
 E 
Podemos chamar de árvore semântica a árvore sintática após o processo de 
análise semântica. 
 
Questão 6/10 - Compiladores 
A forma BNF do inglês Backus-Naur Form, pode ser utilizada para simplificar a 
especificação de regras de produção para a criação de linguagens simplificando o uso de 
gramáticas livre de contexto. Esta forma, e suas derivações, facilitam a interpretação das 
regras de produção. Marque, nas alternativas a seguir aquela que não é verdadeira. 
Nota: 10.0 
 A 
O uso de formas alternativas como a BNF simplifica a criação de analisadores 
sintáticos; 
 B 
Uma vez que utilizamos a BNF não precisaremos analisar o código 
sintaticamente; 
Você acertou! 
 C 
O uso de formas alternativas, como a BNF, torna dispensáveis o uso dos 
analisadores léxicos; 
 D 
Independente da forma escolhida para representar as regras de produção, não 
poderemos utilizar uma análise botton-up ou ascendente. 
 E 
Independente da forma escolhida para representar as regras de produção, não 
poderemos utilizar uma análise top-down ou descendente. 
 
Questão 7/10 - Compiladores 
No módulo de análise sintática, utilizamos a definição de uma gramática livre de 
contexto, como base para o processo de análise. Notadamente por que, neste caso, 
estamos interessados com a forma das declarações e não com o seu significado. No caso 
da análise semântica isto não é verdade já que um conjunto significativo de erros podem 
ser detectados no analisador semântico se ele for capaz de entender o sentido das 
declarações e operações. Entre as afirmações a seguir indique aquela que é verdadeira. 
Nota: 10.0 
 A 
Erros de compatibilidade de tipos não são importantes para o analisador 
semântico; 
 B 
A verificação de variáveis e declarações em relação ao escopo de cada bloco de 
código é função do analisador sintático; 
 C 
A duplicidade de declarações de variáveis faz parte das funções do analisador 
semântico; 
Você acertou! 
 D 
Sem o analisador semântico o compilador não seria capaz de detectar nenhum 
erro de digitação; 
 E 
A tabela de símbolos, muito importante nas análises léxica e sintática não tem 
função na análise semântica. 
 
Questão 8/10 - Compiladores 
1. As linguagens de programação em geral pertencem a uma categoria de 
Linguagens baseadas em Gramáticas Livres de Contexto. Estas Gramáticas 
Livres de Contexto são a base para a construção de analisadores sintáticos. E são 
utilizadas paraespecificar as regras sintáticas de uma linguagem de 
programação. Talvez a parte mais importante deste processo seja a possibilidade 
de se representar este tipo de gramática por apenas quatro conjuntos de tal forma 
que uma determinada Gramática G qualquer, tal que: 
G = (N, T, P, S) 
Onde: 
 N – Conjunto finito de símbolos não terminais. 
 T – Conjunto finito de símbolos terminais. 
 P – Conjunto de regras de produção. 
 S – Símbolo inicial da gramática. 
Considerando estas informações marque qual das afirmações a seguir é falsa. 
Nota: 10.0 
 A 
Símbolos terminais: Conjunto finito de símbolos básicos que formam as 
palavras da linguagem, são representadas pelo tokens reconhecidos pelo 
analisador léxico. 
 B 
Símbolos não terminais: Conjunto finito de símbolos que representam os 
símbolos utilizados para controle da gramática e que não farão parte dos tokens. 
 C 
Símbolo inicial: É a variável, um símbolo terminal, que representa o início da 
definição da gramática. 
 D 
Regras de produção: Representam um conjunto de regras sintáticas para a 
definição da linguagem, indicam como símbolos terminais e não terminais 
podem ser combinados. 
 E 
Regras de produção: Representam um conjunto de regras sintáticas para a 
definição da linguagem, mas não indicam nenhuma forma de combinação entre 
os símbolos terminais e não terminais. 
Você acertou! 
 
Questão 9/10 - Compiladores 
O processo de verificação de tipos torna-se mais importante quando consideramos que, 
em muitas linguagens de programação, existem tipos complexos e tipos compostos. No 
caso de tipos compostos como um array ou uma struct, caberá ao analisador semântico a 
análise dos tipos agregados. Há ainda de se considerar a possibilidade de criação de 
novos tipos, compostos ou complexos, de acordo com a necessidade do programador. 
Assim, caberá ao analisador semântico, analisar, por exemplo, um tipo struct criado para 
atender as necessidades específicas de um programa da mesma forma que ele avalia um 
tipo inteiro ou real. Com relação a verificação de tipos, qual das afirmativas a seguir é 
incorreta? 
Nota: 10.0 
 A 
A checagem estática de tipos é feita em tempo de compilação, como é o caso da 
linguagem C, quando compilada; 
 B 
A checagem de tipos dinâmica é feita em tempo de execução, como é o caso da 
linguagem PHP, quando interpretada; 
 C 
Linguagens de programação podem exigir a definição de tipo para cada variável 
ou estrutura de dados composta ou, podem determinar estes tipos em tempo de 
execução, dependendo de escolhas realizadas na definição da linguagem; 
 D 
A definição de tipos complexos, como listas e pilhas, independe da linguagem 
de programação e, como tal, estes tipos podem ser verificados por qualquer 
analisador semântico; 
Você acertou! 
 E 
Ainda que tipos complexos e compostos tornem o processo de análise 
semântica mais complexo e demorado, as funcionalidades que são agregadas as 
linguagens de programação por estes constructors torna sua utilização 
indispensável. 
 
Questão 10/10 - Compiladores 
A principal função do analisador sintático é construir uma estrutura de dados que 
permitirá a validação do código utilizando as regras de produção, símbolos terminais e 
não terminais. Para permitir esta análise, qual a estrutura de dados que é utilizada pelos 
analisadores sintáticos modernos. 
Nota: 10.0 
 A um array de símbolos terminais não relacionados com as regras de produção; 
 B 
uma árvore contendo símbolos terminais e não terminais que obedecem as 
regras de produção; 
Você acertou! 
 C 
um registro (struct), contendo as regras de produção arrumadas em um array de 
símbolos terminais; 
 D um texto composto apenas dos símbolos não terminais; 
 E um array multidimensional contendo símbolos terminais e não terminais.