Buscar

Apol 1 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

Prévia do material em texto

Questão 1/10 - Compiladores 
Se fossemos reduzir todo o processo de análise semântica e suas funções principais 
poderíamos dizer que se trata da análise de tipos e de escopo. Primeiro, e mais 
importante, garantir que todas as declarações, operações e variáveis tenham tipos 
coerentes e, quando não, proceder a conversão automática ou emitir um erro. Segundo 
verificar as declarações, variáveis e operações com relação ao escopo. Ainda com 
relação a verificação de escopo e a linguagem C, qual das opções a seguir é falsa. 
Nota: 10.0 
 A 
Verificar se uma variável foi declarada em duplicidade faz parte das funções do 
analisador semântico; 
 B 
Verificar se uma variável foi inicializada antes do uso é parte integrante da 
verificação de escopo realizada pelo analisador semântico; 
 C 
Verificar se uma determinada variável foi declarada, mas nunca foi usada está 
entre as funcionalidades de um analisador semântico; 
 D 
Verificar se um array, uni ou multidimensional, teve seus limites declarados 
antes de ser utilizado é parte integrante das funções do analisador semântico; 
 E 
Verificar se uma função foi declarada antes do seu uso não faz parte das 
funções do analisador semântico e deve ser verificado pelo analisador sintático 
durante a formação da árvore sintática. 
Você acertou! 
 
Questão 2/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 3/10 - Compiladores 
O processo de compilação é complexo. Para seu entendimento dividimos este processo 
em módulos de acordo com suas funcionalidades principais. Desta forma temos o 
analisador léxico, o analisador sintático, o analisador semântico entre outros 
dependendo apenas da didática utilizada para explicar cada um destes módulos e suas 
funcionalidades. Do ponto de vista da manutenção dos dados necessários ao processo de 
compilação, no entanto, há um módulo que permeia todos os outros, a tabela de 
símbolos. É nesta estrutura de dados que estão armazenados os tokens, a árvore sintática 
e a árvore semântica. Considerando as afirmativas a seguir marque a que está correta. 
Nota: 10.0 
 A 
A árvore semântica é a árvore sintática que foi identificada (etiquetada) pelo 
analisador semântico, contendo correções de tipos, indicações de erro; 
Você acertou! 
 B A criação da árvore semântica começa antes do processo de criação de tokens; 
 C 
Chamamos de árvore semântica ao conjunto de linhas que compõe todas as 
declarações do código na forma em que foram escritas; 
 D 
A árvore semântica será descartada ao término do processo de análise semântica 
e não afetará a geração de código; 
 E 
Eventuais erros detectados pelo analisador semântico provocam a poda da 
árvore sintática retirando desta as declarações onde os erros foram encontrados 
facilitando a geração do código executável; 
 
Questão 4/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. 
 
Questão 5/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 6/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; 
Você acertou! 
 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 7/10 - Compiladores 
Uma das principais características de uma linguagem formal é a existência de uma 
estrutura rígida e precisamente especificada. As linguagens formais são utilizadas na 
programação de computadores há várias décadas principalmente por que sua estrutura 
rígida torna o processo de compilação possível. Ainda relacionado as linguagens 
formais qual das afirmativas abaixo é verdadeira? 
Nota: 10.0 
 A 
A língua portuguesa, graças a sua gramática estruturada é um exemplo de 
linguagem formal; 
 B 
As linguagens formais não podem ser definidas com o uso de máquinas de 
estados finitos; 
 C 
A linguagem de programação Java constitui um exemplo de linguagem natural 
usada em programação; 
 D 
Uma das formas de definir uma linguagem formal reside no uso de expressões 
regulares; 
Você acertou! 
A resposta correta é a letra D, o teorema de Kleene declara que só podem ser 
classificadas como linguagensformais aquelas que podem ser definidas com o 
uso de máquinas de estados finitos e/ou expressões regulares. 
 E 
O Teorema de Kleene, para a definição de linguagens naturais, torna mais 
eficiente o processo de interpretação em máquinas que rodem o Javascript. 
 
Questão 8/10 - Compiladores 
As cadeias de caracteres, ou strings são artefatos de linguagens utilizados com 
frequência pelas linguagens de programação já que, na maior parte das vezes, se 
referem a textos que desejamos ler, guardar ou imprimir. Contudo, sua definição formal 
é mais elucidativa se consideramos sua relação com o alfabeto. Sendo assim, dadas as 
opções a seguir assinale a alternativa falsa. 
Nota: 10.0 
 A 
Uma string é uma sequência ordenada de símbolos que existem em um 
determinado alfabeto; 
 B 
Considerando a string “110110011” podemos dizer que ela faz parte de um 
alfabeto de números binários; 
 C A string vazia faz parte de todos os alfabetos possíveis; 
 D 
Podemos usar símbolos que não façam parte de um alfabeto para marcar o 
começo e o fim de uma string; 
 E 
Dado um alfabeto qualquer, em linguagens formais, não é possível identificar 
uma string utilizando uma máquina de estados finitos. 
Você acertou! 
Em linguagens formais, as máquinas de estados finitos e as expressões 
regulares são duas formas eficientes de identificar strings de um alfabeto dado. 
 
Questão 9/10 - Compiladores 
O processo de compilação é fundamental para a eficiência dos programas que 
executamos todos os dias. Dado que compilar, é uma espécie de tradução, onde uma 
linguagem própria para uso humano é convertida em uma linguagem própria para uso 
de máquinas. 
 
I. Otimização de Código de Máquina; 
II. Analisador Sintático; 
III. Analisador Léxico; 
IV. Analisador Semântico. 
Escolha a alternativa que contém a ordem correta de um processo de compilação básico 
entre as possibilidades acima: 
Nota: 10.0 
 A I, II, III, IV; 
 B 
III, II, IV, I; 
Você acertou! 
Letra B Observar, por favor o capítulo 1 do Livro texto da disciplina. 
 C II, I, IV, III; 
 D IV, III, II, I; 
 E I, III, IV, II. 
 
Questão 10/10 - Compiladores 
Levando-se em consideração o processo de compilação padrão da linguagem C/C++, 
podemos observar a criação de arquivos com a terminação .obj. Entre as alternativas a 
seguir, assinale a alternativa falsa relativa aos arquivos do tipo .obj deste processo de 
compilação. 
Nota: 10.0 
 A 
Arquivos .obj contém código de máquina referente a um arquivo de código-
fonte específico; 
 B 
Graças a existência destes arquivos .obj, podemos utilizar bibliotecas pré-
compiladas e reduzir o tempo de compilação dos nossos programas; 
 C 
A principal função do Linker é fazer a junção de todos os arquivos .obj 
envolvidos no processo de compilação; 
 D 
Se o arquivo .obj já está em linguagem de máquina, ele pode ser facilmente 
executado em um sistema operacional; 
Você acertou! 
Ainda que o arquivo .obj possa conter código de máquina e, em alguns casos, 
apenas código de máquina, este arquivo não pode ser executado por não conter 
as informações específicas de execução necessárias para o sistema operacional. 
 E 
Sem o uso de arquivos .obj o processo de compilação seria mais lento já que 
todas as funções e objetos utilizados no seu código teriam que passar por todo o 
processo de compilação ficando mais lento.

Continue navegando