Buscar

Apols Compiladores

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 20 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 20 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 9, do total de 20 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

Prévia do material em texto

Todas as Apol’s
Apol 1
Questão 1/5 - 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: 20.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.
Questão 2/5 - Compiladores
O código ASCII usado com frequência em computação e o Unicode, contendo mais de 100.000 caracteres de diversas linguagens naturais são exemplos de alfabetos. Com isso em mente e considerando a definição de alfabeto marque, entre as opções a seguir, qual definição não corresponde a um alfabeto do ponto de vista do estudo das linguagens formais.
Nota: 20.0
	
	A
	Σ={0,1}Σ={0,1}
	
	B
	ΣI={1,2,a,b}ΣI={1,2,a,b}
	
	C
	Σv={a,e,i,o,u}Σv={a,e,i,o,u}
	
	D
	ΣM={abba}ΣM={abba}
	
	E
	ΣI={0,1,2,3,4,...}ΣI={0,1,2,3,4,...}
Você acertou!
o conjunto  é infinito não atendendo a definição de alfabeto.
Questão 3/5 - 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.
Nota: 20.0
	
	A
	
Você acertou!
estamos falando dos números binários que terminam 10. Uma análise detalhada dos estados e transições da máquina representada no enunciado permite perceber que: uma string que comece com qualquer números de zeros irá manter a máquina no estado ; o primeiro um da string de entrada colocará a máquina no estado  neste ponto, todos os próximos uns manterão a máquina no estado ; O primeiro zero colocará a máquina no estado , em accepting state; Neste estado um zero levará ao estado  caso contrário a máquina irá para o estado . Ou seja, a única forma de atingir o accepting state é receber um em  e  zero em
	
	B
	
	
	C
	
	
	D
	
	
	E
	
Questão 4/5 - 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: 20.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 5/5 - 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: 20.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 linguagens formais 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.
Apol 2
Questão 1/5 - 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.
Nota: 20.0
	
	A
	
Você acertou!
estamos falando dos números binários que terminam 10. Uma análise detalhada dos estados e transições da máquina representada no enunciado permite perceber que: uma string que comece com qualquer números de zeros irá manter a máquina no estado ; o primeiro um da string de entrada colocará a máquina no estado  neste ponto, todos os próximos uns manterão a máquina no estado ; O primeiro zero colocará a máquina no estado , em accepting state; Neste estado um zero levará ao estado  caso contrário a máquina irá para o estado . Ou seja, a única forma de atingir o accepting state é receber um em  e  zero em
	
	B
	
	
	C
	
	
	D
	
	
	E
	
Questão 2/5 - 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: 20.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 3/5 - Compiladores
O analisador sintático é, para todos os efeitos, o segundo maior bloco funcional no processo de compilação ficando entre o analisador léxico e o analisador semântico. Marque entre alternativas a seguir, aquela que contém apenas funcionalidades atribuídas ao analisador sintático considerando-se os compiladores utilizados para a linguagem C.
Nota: 20.0
	
	A
	Identificação dos lexemas para a criação da árvore semântica etiquetada;
	
	B
	Identificação de sentenças e montagem da árvore sintática;
Você acertou!
	
	C
	Identificação de sentenças para a criação de tokens;
	
	D
	Identificação de tokens para a determinação de tipos;
Questão 4/5 - 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 para especificar 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 detal 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: 20.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 5/5 - Compiladores
O código ASCII usado com frequência em computação e o Unicode, contendo mais de 100.000 caracteres de diversas linguagens naturais são exemplos de alfabetos. Com isso em mente e considerando a definição de alfabeto marque, entre as opções a seguir, qual definição não corresponde a um alfabeto do ponto de vista do estudo das linguagens formais.
Nota: 20.0
	
	A
	Σ={0,1}Σ={0,1}
	
	B
	ΣI={1,2,a,b}ΣI={1,2,a,b}
	
	C
	Σv={a,e,i,o,u}Σv={a,e,i,o,u}
	
	D
	ΣM={abba}ΣM={abba}
	
	E
	ΣI={0,1,2,3,4,...}ΣI={0,1,2,3,4,...}
Você acertou!
o conjunto  é infinito não atendendo a definição de alfabeto.
Apol 3
Questão 1/5 - 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: 20.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 2/5 - 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: 20.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/5 - 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: 20.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 4/5 - 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: 20.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 5/5 - 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álisesemâ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: 20.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.
Apol 4
Questão 1/5 - Compiladores
“Definimos linguagem formal como sendo uma linguagem que possa ser rígida e precisamente especificada (BERGMANN, 2010) e que, de alguma forma, seja conveniente para o uso em computação, diferenciado da linguagem natural em rigidez e precisão.” Considerando esta definição de linguagem formal podemos afirmar que:
Marque a alternativa correta:
Nota: 20.0
	
	A
	Uma linguagem de programação não pode ser incluída no conjunto das linguagens formais;
	
	B
	As linguagens naturais, como o português ou o inglês, se fossem utilizadas para a criação de programas tornariam o processo de compilação muito lento e dispendioso;
Você acertou!
	
	C
	As linguagens formais, no Brasil, obedecem às mesmas regras gramaticais que utilizamos em português;
	
	D
	Para a definição de uma linguagem formal, não precisamos nos preocupar com o conjunto de símbolos que serão utilizados por textos escritos nesta linguagem;
	
	E
	Os conceitos de linguagens formais, ainda que relacionados a computação, não têm nenhuma influência na criação de um compilador.
Questão 2/5 - Compiladores
“A informação armazenada na tabela de símbolos é resultado do processo de compilação de tal forma que a cada novo passo as informações são armazenadas, alteradas ou removidas de forma a atender melhor o passo seguinte. ” As tabelas de símbolos são estruturas de dados que permeiam o processo de compilação. Sobre estas estruturas podemos afirmar que:
Marque a alternativa errada:
Nota: 20.0
	
	A
	Uma tabela de símbolos pode conter dados oriundos de diversos módulos do processo de compilação;
	
	B
	Para criar a tabela de símbolos podemos utilizar diversas estruturas de dados clássicas, inclusive de forma misturada, para atingir a maior eficiência;
	
	C
	Para que o processo de compilação seja o mais eficiente possível, a tabela de símbolos deve ser otimizada para o menor tempo de acesso possível, tanto em busca quanto em escrita e remoção de dados;
	
	D
	Em uma tabela de símbolos não podem ser gravadas as classes que serão utilizadas para identificar os Tokens;
Você acertou!
	
	E
	O uso de várias estruturas de dados em uma mesma tabela de símbolos permite que cada módulo do processo de compilação utilize e estrutura que seja mais adequada as suas funções em busca de eficiência.
Questão 3/5 - Compiladores
“Chamamos de arquitetura o conjunto de especificações que determina como uma determinada CPU funciona. Existe, por exemplo a arquitetura x86 da Intel, a arquitetura ARMv8-A da empresa ARM e a arquitetura PowerPC que começou com a IBM mas hoje é uma arquitetura aberta.” Desta forma é fácil extrapolar este conceito para o universo dos compiladores. Sendo assim, podemos afirmar que:
Marque a alternativa errada.
Nota: 20.0
	
	A
	Compiladores convertem linguagens de alto nível para linguagem de máquina;
	
	B
	O código criado para a arquitetura ARM pode ser diretamente executado na arquitetura PowerPC;
Você acertou!
	
	C
	O uso de linguagens de alto nível permite que seja possível escrever um único código para todas as arquiteturas, desde que possamos compilar para esta arquitetura;
	
	D
	Cada arquitetura tem seu próprio conjunto de instruções e registradores;
	
	E
	Podemos escolher a arquitetura de acordo com a aplicação e, criar código que retirem o máximo de performance usando uma linguagem como o C deste que tenhamos um compilador capaz de produzir código para a arquitetura escolhida.
Questão 4/5 - Compiladores
“O Hardware é a parte física, os dispositivos eletrônicos que formam seu computador. Usamos a palavra Hardware, do inglês, de forma genérica para representar todos os componentes físicos de um computador e, hoje em dia até mesmo de um tablet ou smartphone. O Software, por outro lado, representa os programas, a parte intangível do computador. Em linhas gerais, o hardware é a plataforma onde o software é executado e permite que seu computador faça alguma coisa.” Desta forma, podemos afirmar que:
Marque a alternativa correta:
Nota: 20.0
	
	A
	Linguagens como a linguagem C e Java são consideradas linguagens de máquina;
	
	B
	Ainda que alguns considerem o Assembly como tal, apenas o código em binário é a verdadeira linguagem de máquina;
Você acertou!
	
	C
	Hoje em dia, a tecnologia evoluiu tanto que, mesmo usando os compiladores mais eficientes, não é possível criar códigos que sejam executados diretamente nos processadores;
	
	D
	As linguagens de alto nível como o C, o C++ e o Java podem ser executadas diretamente nas CPUs;
	
	E
	Apenas que entende código binário é capaz de programar os dispositivos do séculos XXI.
Questão 5/5 - Compiladores
“O Assembly é o exemplo clássico de linguagem de programação de baixo nível. Como este tipo de linguagem requer um conhecimento profundo da arquitetura, você não consegue usar o código escrito em uma arquitetura diferente da sua máquina. Além disso, é muito difícil memorizar todos os comandos e todas as instruções.” Esta é uma característica das linguagens de baixo nível. Por isso, criamos os compiladores e passamos para estes a responsabilidade de entender o conjunto de instruções de cada arquitetura.
Entre as opções a seguir, marque aquela que está errada:
Nota: 20.0
	
	A
	A existência de instruções e endereços diferentes torna difícil criar programas que sejam multiplataforma em linguagens de baixo nível;
	
	B
	Quanto mais baixo o nível da linguagem, mais próximo do código binário e mais difícil a programação multiplataforma;
	
	C
	O Assembly foi a primeira tentativa de facilitar a escrita de programas;
	
	D
	Ainda que programemos em linguagens de alto nível como o C/C++, em casos em que precisamos acessar diretamente o hardware, precisamos conhecer a arquitetura da máquina profundamente. Este é o caso da criação de drivers para dispositivos USB, por exemplo;
	
	E
	Com o uso de interpretadores as máquinas podem dispensar o uso do código binário e executar Javascript, por exemplo, diretamente.
Você acertou!
Apol 5
Questão 1/5 - 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: 20.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 provocama 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 2/5 - 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: 20.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 3/5 - 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: 20.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 4/5 - Compiladores
O 3opCode pode ser escrito de uma forma mais adequada a nossa álgebra para permitir a leitura e otimização manual do código. Ainda que o processo de otimização manual esteja fora de uso. Em alguns casos onde uma pequena variação na eficiência do código tenha grande impacto financeiro este tipo de otimização pode ser necessário. Neste caso, recorremos aos blocos básicos e ao diagrama de fluxo como ferramentas para otimização de código. Considerando esta fase do processo de compilação qual das afirmativas a seguir contém otimizações que são feitas utilizando-se os blocos básicos?
Nota: 20.0
	
	A
	Adequação dos tipos e remoção de código morto.
	
	B
	Remoção de redundâncias e código morto.
Você acertou!
	
	C
	Remoção de redundância e correção de estruturas sintáticas.
	
	D
	Adequação dos tipos e correção de escopo.
	
	E
	Correção de escopo e remoção de redundâncias.
Questão 5/5 - 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: 20.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!
Apol6
Questão 1/5 - 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
Nota: 20.0
	
	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;
Você acertou!
a resposta correta é a letra C e pode ser encontrada no primeiro capítulo do livro texto.
	
	D
	A análise sintática só pode ser realizada depois que o seu código-fonte esteja convertido em 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 2/5 - 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: 20.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 3/5 - 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: 20.0
	
	A
	um array de símbolos terminais não relacionados com as regrasde 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 4/5 - 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: 20.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/5 - Compiladores
O código ASCII usado com frequência em computação e o Unicode, contendo mais de 100.000 caracteres de diversas linguagens naturais são exemplos de alfabetos. Com isso em mente e considerando a definição de alfabeto marque, entre as opções a seguir, qual definição não corresponde a um alfabeto do ponto de vista do estudo das linguagens formais.
Nota: 20.0
	
	A
	Σ={0,1}Σ={0,1}
	
	B
	ΣI={1,2,a,b}ΣI={1,2,a,b}
	
	C
	Σv={a,e,i,o,u}Σv={a,e,i,o,u}
	
	D
	ΣM={abba}ΣM={abba}
	
	E
	ΣI={0,1,2,3,4,...}ΣI={0,1,2,3,4,...}
Você acertou!
o conjunto  é infinito não atendendo a definição de alfabeto.

Outros materiais