Buscar

questionario-unidade-2-2015-2-cc-matheus-marcos

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 16 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 16 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 16 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

Questionário Unidade II 
Pergunta 1
Supondo a expressão dada pela árvore sintática abaixo, assinale a 
alternativa que corresponde ao código intermediário gerado na forma 
de quádruplas.
a)
b)
c)
 d)
Resultado Operador Oper_1 Oper_2
t1 * b c
t2 -U d 
t3 * b t2
Resultad
o
Operador Oper_1 Oper_2
t1 -U c 
t2 * b d
Resultad
o
Operador Oper_1 Oper_2
t1 * b c
t2 * b d
Resultad
o
Operador Oper_1 Oper_2
t1 * b c
t2 -U d -
Resultad
o
Operador Oper_1 Oper_2
t1 * b c
t2 -U d -
d)
Pergunta 2
Aspectos como a obrigatoriedade de declaração antes do uso,
compatibilidade de tipos durante atribuições ou mesmo a adequação
as regras de escopo na utilização dos identificadores, são exemplos
de questões que estão além do domínio sintático de uma linguagem
de programação. Assim a análise semântica é responsável,
fundamentalmente, por realizar três tarefas básicas: construir uma
descrição dos tipos e estruturas de dados definidas pelo
programador; armazenar informações sobre os identificadores; e
verificar os tipos e demais aspectos dependentes de contexto na
estrutura do programa.
Acerca da análise semântica de programas, assinale a alternativa 
correta.
a) Considera-se portanto que são atribuições do componente semântico de um
compilador as tarefas de verificar o emprego correto dos identificadores, no
que diz respeito ao seu escopo de uso, tipagem e declaração prévia. Deste
modo, em linguagens ditas fracamente tipadas a fase de análise semântica
do em compilador é inexistente, uma vez que não necessitam definir o tipo
de uma variável e tampouco declará-la antecipadamente.
b) Algumas atividades da análise semântica são ditas estáticas, pois
relacionam-se estritamente com as questões de relacionamento entre os
elementos do código fonte. Como exemplo de semântica estática, podemos
citar as verificações de tipos e escopo para variáveis e sub-rotinas. Contudo,
linguagens orientadas a objetos, a verificação de tipos durante a declaração
de objetos não pode ser realizada em tempo de compilação dado os
mecanismos de herança.
c) Há aspetos semânticos que estão ligados a execução do programa e
referem-se a forma como o programa realiza suas tarefas. Por exemplo,
supondo o comando “SE (i<>0) E (K/I > 10) ...”, entende-se que, se
concluirmos que a primeira parte é falsa não há necessidade de avaliar a
segunda (uma vez que para o operador E é impossível obter um resultado
verdadeiro nesta situação). Por outro lado, se o analisador semântico não
considerar a relação que envolve estas duas cláusulas, a falsidade da
primeira implicará em um erro de divisão por zero durante a avaliação da
segunda cláusula.
d) O processo de análise semântica não permite o uso de formalismos uma vez
que suas atividades estão além do domínio sintático da linguagem. Na
maioria dos casos suas tarefas são implementadas manualmente em meio
as verificações de sintaxe, tornando estas duas fases indistinguíveis durante
o processo de compilação.
e) A tabela de símbolos é considerada uma estrutura de armazenamento
secundária e de pouca importância, pois nela são encontrados apenas os
dados sobre os identificadores presentes no programa. Sua existência se
justifica pela necessidade de tornar os elementos definidos pelo
programador conhecidos ao compilador, de modo que este não acuse tais
elementos como erros durante o processo de compilação.
Pergunta 3
Em uma Gramática de Atributos podemos classificar cada um de seus
atributos em duas categorias, herdados e sintetizados, de acordo com
o símbolo a quem estão associados durante o seu cálculo. Os
chamados atributos herdados são aqueles que aparecem ligados a
elementos posicionados a direita do sinal de derivação, ou seja, em
uma regra na forma A→α, seriam os atributos ligados a qualquer
símbolo da sentença α. Por sua vez, os atributos ditos sintetizados
são aqueles que aparecem associados ao elemento da esquerda do
sinal de derivação, isto é, para o nosso exemplo, seriam aqueles que
estiverem associados ao símbolo A. A respeito dos atributos analise
os itens a seguir e assinale a alternativa correta.
i) Entre outros aspectos, a categorização dos atributos é
importante pois permite determinar o sentido em que devemos
percorrer a árvore sintática para calculá-lo. No caso dos
atributos herdados, como o próprio nome sugere, seu valor é
calculado a partir de elementos hierarquicamente superiores da
árvore e dos quais este valor “deriva”.
ii) Atributos sintetizados são computados a partir de nós
inferiores da árvore sintática, assim os sucessivos valores deste
atributo podem ser calculados percorrendo a árvore de baixo
para cima. Esta categoria de atributos é especialmente
interessante para a propagação de características comuns a
diferentes trechos do código, como por exemplo, no trecho “int
x, y, z;”, em que o tipo int pode ser propagado para um nó
superior comum a todas as variáveis (x, y e z) declaradas no
mesmo comando.
iii) Gramáticas que utilizam apenas atributos sintetizados são
chamadas de S-Atribuídas. Na tradução dirigida pela sintaxe,
assume‐se que os símbolos terminais tenham apenas atributos
sintetizados uma vez que as definições não providenciem
quaisquer regras semânticas, apenas ações para a geração de
código.
a) Apenas o item i é verdadeiro.
b) Apenas o item ii é verdadeiro.
c) Os itens i e ii são verdadeiros.
d) Os itens i e iii são verdadeiros.
e) Todos os itens são verdadeiros.
Pergunta 4 
São tarefas de responsabilidade de um montador Assembler:
i) A substituição dos mnemônicos pelos opcodes numéricos do
conjunto ISA (Instruction Set of Architecture), seguindo uma
tabela de associações que relaciona o mnemônico com a
instrução-alvo.
ii) A substituição dos endereços simbólicos que representam
destinos de saltos e constantes por endereços numéricos,
determinando de maneira absoluta ou relativa em termos do
registrador PC (Program Counter) o endereço de destino dos
rótulos.
iii) Reservar espaço na memória para armazenamento de dados
de acordo com o tipo associado a cada variável declarada no
programa.
iv) Gerar constantes em memória para variáveis e constantes,
determinando o valor associado ao modo de endereçamento do
operando.
a) Apenas o item i é verdadeiro.
b) Apenas os itens i e ii é verdadeiro.
c) Os itens i, ii e iii são verdadeiros.
d) Os itens ii, iii e iv são verdadeiros.
e) Todos os itens são verdadeiros.
Pergunta 5
Um analisador sintático dito ascendente é aquele que processa a
cadeia de entrada e constrói sua árvore de derivação de baixo para
cima, ou seja, partindo dos símbolos do programa (as folhas da
árvore) em direção ao símbolo inicial da gramática (raiz). A esse
respeito analise cada uma das afirmativas a seguir e marque a
alternativa correta.
i) Por conta de sua forma peculiar de construção da árvore, os
passos executados pelo analisador correspondem ao processo
de derivação conhecido como mais à direita (right-most)
invertido. O processo mais à direita é aquele em que sempre
derivamos o símbolo não-terminal mais à direita antes dos
demais. E é dito invertido para que a entrada possa ser
processada de maneira natural, isto é, a leitura dos símbolos de
entrada sendo feito do início para o fim do arquivo.
ii) Analisadores deste tipo realizam duas operações básica: de
empilhamento (ou deslocamento) de s, em que o símbolo da
entrada s é colocado na pilha; e a operação de redução pela
regra A→α, em que os símbolos correspondentes a cadeia α são
retirados da pilha e substituídos pelo não-terminal A.
iii) A validação do programa acontece quando o analisador
processa todos os símbolos da entrada e alcança o fim de
arquivo, independentemente do conteúdo da pilha de controle
do processo. Estemomento é conhecido como validação por
entrada vazia.
a) Apenas o item i é verdadeiro.
b) Apenas o item ii é verdadeiro.
c) Apenas os itens i e ii são verdadeiros.
d) Apenas os itens i e iii são verdadeiros.
e) Todos os itens são verdadeiros.
Pergunta 6 
A respeito dos Carregadores (Loaders) é incorreto afirmar:
a) Avaliar a quantidade de memória necessária ao programa e 
solicitá-la ao SO.
b) Copiar o programa para a memória principal e preparar sua 
execução.
c) Ajustar os endereços do código executável de acordo com a 
posição base de carregamento.
d) Resolver os endereços de código dinamicamente em situações 
de swapping, pois os processos não necessariamente retornam 
a mesma posição.
e) Reunir os módulos objeto em um único elemento chamado de 
módulo absoluto de carga.
Pergunta 7
Supondo o comando: delta = b * b – 4 * a * c; (em C) assinale a
alternativa que corresponde a uma das possíveis versões de código
intermediário dado na forma de quádruplas para este comando.
a. Resultad
o
Operador Oper_1 Oper_2
t1 * b b
t2 * a c
t3 * -4 t2
t4 - t1 t3
A := t4 
b. Resultad
o
Operador Oper_1 Oper_2
t1 * b b
t2 * a c
t3 * 4 t2
t4 -U t3 
t5 + t1 t3
A := t5 
c. Resultad
o
Operador Oper_1 Oper_2
t1 * -4 a
t2 * t1 c
t3 * b b
t4 - t1 t3
A := t4 
d. Resultad
o
Operador Oper_1 Oper_2 Oper_3
t1 * b b 
t2 * -4 a c
t3 - t1 t2 
A := t3 
e. Resultad
o
Operador Oper_1 Oper_2 Oper_3
t1 * b b 
t2 * -4 a c
A + t1 t2 
Pergunta 8
A tabela de símbolos é uma estrutura de dados que tem por propósito
armazenar todos os nomes declarados pelo programador juntamente
com os seus respectivos atributos. É considerada fundamental para o
processo de compilação, pois participa de várias etapas do processo
inclusive para a geração de código. Durante a análise semântica o
compilador busca nesta tabela as informações sobre os
identificadores que participam de suas análises, como por exemplo,
para recuperar os tipos dos identificadores envolvidos no cálculo de
uma expressão com o propósito de verificar a compatibilidade entre
eles.
Sobre a tabela de símbolos e a análise semântica é incorreto afirmar 
que:
a) Questões relacionadas a declaração prévia dos identificadores, escopo de utilização e
a verificação dos argumentos informados como parâmetro durante a chamada de uma
sub-rotina são aspectos pertinentes ao componente semântico de tempo de execução.
b) Os tipos declarados pelo programador estendem os elementos básicos da linguagem, 
permitindo a definição de variáveis que estão além dos tipos primitivos oferecidos por 
ela. Desta forma, em uma linguagem de programação orientada a objetos, o analisador
semântico desempenha um papel mais complexo uma vez que é responsável também 
pelas verificações de compatibilidade entre classes derivadas e pela resolução do 
escopo no caso da reescrita de métodos.
c) A tabela de símbolos apresenta registros (tuplas) de tamanhos variados, de acordo 
com natureza do identificador armazenado. Por exemplo, para variáveis são 
importantes informações quanto ao tipo de dado que armazena, seu escopo de 
atuação e visibilidade; já para as sub-rotinas, além do nome que a identifica, é 
importante saber quantos parâmetros são esperados, assim como o tipo de cada um 
deles.
d) Durante o processo de análise sempre que um novo identificador é encontrado, uma 
nova entrada na tabela símbolos é criada e as informações a ele relacionadas são 
armazenadas. Ao longo do código várias ocorrências dos mesmos identificadores 
poderão ser encontradas. Se o contexto for o de comandos e não o de declarações, 
apenas operações de consulta são realizadas na tabela. Com isso é possível validar o 
uso do identificador em questão quanto ao tipo e escopo, por exemplo, além da 
obrigatoriedade de sua declaração antes da utilização.
e) A tabela de símbolos é importante para a geração de código, pois nela encontram-se 
reunidas as informações sobre todos os identificadores do programa. A partir de seus 
dados, é possível dimensionar a quantidade de memória que precisará ser alocada 
para o armazenamento das variáveis estáticas, por exemplo.
Pergunta 9
Um dos tipos de analisadores ascendentes é o conhecido como LR(1), que constrói a árvore
sintática do programa realizando reduções através das regras da gramática geradora da
linguagem. Considerando o estado corrente do mecanismo reconhecedor (um autômato de
pilha) e apenas um símbolo da entrada é possível determinar com precisão qual a regra
apropriada e que de ser aplicada em cada momento do processo de análise do programa.
A construção desse autômato começa com uma ampliação das regras da gramática, as quais
acrescenta-se uma nova regra que sinalize o início do processo de derivação e permita
diferenciar qualquer ocorrência do símbolo inicial daquela que se configura como raiz da árvore
sintática.
Adicionalmente caracterizamos os diferentes momentos de derivação de uma regra através de
uma representação na forma de item. Num item dado por A→α•β, o marcador sinaliza os
símbolos que já foram encontrados pelo parser (os símbolos de α) e também aqueles que
ainda faltam para que a regra tenha sido completamente derivada (a sequência correspondente
a β). Quando todos os símbolos tiverem sido encontrados, ou seja, tivermos um item na forma
A→αβ• é possível então realizar a redução da sequência correspondente αβ por A.
Supondo a gramática dada a seguir: 
G = ( {S,V,D,T,L}, {“int”, “float”, “id”, “;” , “,”}, P, S)
P = { (0) S → V, (4) T → “int”,
 (1) V → D “;” V, (5) T → “float”,
 (2) V → D, (6) L → L “,” “id”
 (3) D → TL, (7) L → “id” }
Sabendo que já encontra-se aumentada pela inclusão da regra 0, assinale a alternativa que
corresponde ao primeiro estado (inicial) do autômato de reconhecimento deste analisador.
a. Estado 0:
 S → •V
b. Estado 0:
 S → •V
 V → •D “;” V
 V → •D
c. Estado 0:
 S → •V
 V → •D “;” V
 V → •D
 D → •TL
 T → •“int”
 T → •“float”
 L → •L “,” “id”
 L → •“id”
d. Estado 0:
 S → •V
 V → •D “;” V
 V → •D
 D → •TL
 T → •“int”
 T → •“float”
e. Estado 0:
 S → •V
 V → •D “;” V
 V → •D
 D → •TL
 L → •L “,” “id”
Pergunta 10 
O Linker tem a tarefa de reunir em um único programa os vários
módulos objeto obtidos a partir da tradução dos diferentes arquivos
fontes que compõe o programa. Esse arquivo resultante, dado por
todas as partes devidamente encaixadas, damos o nome de Módulo
Absoluto de Carga. Durante esse processo o linker deve ser capaz de
resolver as chamadas Referências Cruzadas, isto é, referência a
elementos externos ao módulo corrente e são conhecidos apenas
após a ligação do módulos. Tendo em mente estas atribuições,
é incorreto afirmar que cabe ao Linker:
a) Construir uma tabela com todos os módulos objeto e registrar
seus respectivos comprimentos.
b) Atribuir um endereço de carga a cada módulo objeto, que
identificará sua posição dentro do módulo de carga.
c) Relocar todas as instruções que contêm um endereço,
adicionando ao seu endereço uma constante de relocação (que
é o endereço inicial de cada módulo).
d) Encontrar todas as instruções que referenciam outros
procedimentos e inserir nelas o endereço absoluto dos mesmos.
e) Copiar o módulo de carga para a memória principal, preparando
o programa para a sua execução.
QUESTOES EXTRAS
A memória é um recurso controlado pelo sistema operacional e um programa não deve ter 
posições de memória fixas e pré-estabelecidas para que funcione corretamente. Usualmente o 
programador desenvolve seu código despreocupado de qual será sua localização na memória, 
pois caberá ao sistema resolver os problemas relacionados com posicionamento do código 
quando colocar o programa na memória para execução. Este processo de resolução de 
endereços é chamado de relocação.
A atividade de relocação é realizadaconjuntamente por montadores e carregadores. Os 
montadores são encarregados de marcar as posições no código-objeto passíveis de alteração, 
enquanto os carregadores devem reservar espaço suficiente na memória para receber o código
de máquina e atualizar suas posições a partir da localização base do programa na memória.
A esse respeito analise as afirmativas a seguir e assinale a alternativa correta.
i) As referências aos símbolos externos devem estar presentes no módulo-objeto e podem 
ocorrer quanto um símbolo é referenciado no segmento, mas, definido, ocorre em outro 
segmento (descrito como uma referência externa), ou ainda, quando um símbolo é definido 
neste segmento e poderá ser referenciado em outro segmento (descrito como uma definição 
local de um símbolo externamente referenciável).
ii) o Dicionário de Símbolos Externos contém todos os símbolos que estão envolvidos no 
processo de resolução de referências entre segmentos: símbolos associados a referências 
externas, a definições locais ou a definições de segmentos.
iii) o Diretório de Relocação e Ligação indica, para cada segmento, quais posições deverão ter 
seus conteúdos atualizados, de acordo com o posicionamento em memória deste e de outros 
segmentos.
a. Apenas o item i é verdadeiro.
b. Apenas o item ii é verdadeiro.
c. Os itens i e ii são verdadeiros.
d. Os itens i e iii são verdadeiros.
e. Todos itens são verdadeiros.
A sintaxe geralmente é definida por uma Gram. Livre de Contexto, mas estas não são capazes 
de descrever aspectos sobre a compatibilidade de tipos ou regras de escopo de identificadores.
Analise as informações a seguir e assinale a alternativa correta.
i) Uma Gramática de Atributos é uma gramática livre de contexto estendida com regras de 
cálculo e/ou ações semânticas de modo a fornecer sensitividade ao contexto através de 
elementos chamados de atributos, que estão associados aos símbolos terminais e não 
terminais utilizados na regra de produção.
ii) Um atributo é qualquer propriedade da estrutura da linguagem que se deseja quantificar ou 
caracterizar, como por exemplo, o tipo e o escopo das variáveis, valores de expressões, etc.
iii) O valor dos atributos é estabelecido tomando como base a árvore sintática explícita do 
programa e podem ser calculados tanto em tempo de compilação quanto em tempo de 
execução, de acordo com a propriedade que representam.
a. Apenas o item i é verdadeiro.
b. Apenas o item ii é verdadeiro.
c. Os itens i e ii são verdadeiros.
d. Os itens i e iii são verdadeiros.
e. Todos itens são verdadeiros. 
A tabela de movimentos de um analisador LR(1) é construída a partir de um autômato de pilha, 
cujos estados representam o processo de derivação do programa em relação a gramática de 
linguagem. As diferentes posições da tabela informam ao analisador qual a operação 
(empilhamento, redução ou aceitação) deve ser realizada em cada instante do processo de 
análise, tomando como referência apenas o estado corrente e o símbolo (token) dado na 
entrada. Acerca desta tabela e de sua construção, analise cada uma das afirmativas a seguir e 
selecione a alternativa correta.
i) A operação de empilhamento equivale a retirada do símbolo da entrada e sua inserção na 
pilha para processamento. A célula da tabela equivalente a esta ação é dada pelo número 
correspondente ao estado que o autômato assume após a transição.
ii) Durante uma ação de redução, os símbolos (estados) equivalentes a cadeia derivada são 
retirados da pilha e substituídos pelo não-terminal que os origina, realizando assim o processo 
inverso ao da derivação pela regra em questão. Na tabela essa ação é colocada em cada 
células cuja linha corresponde ao estado que contém a regra completada e as colunas 
correspondentes aos símbolos pertencentes ao conjunto de seguidos (Follow) do não-terminal 
associado a regra.
iii) A aceitação da cadeia ocorre quando encontramos uma ocorrência do símbolo inicial da 
gramática. Desta forma, preenchemos a coluna correspondente ao símbolo inicial com esta 
ação para todas as linhas da tabela.
a. Apenas o item i é verdadeiro.
b. Apenas o item ii é verdadeiro.
c. Os itens i e ii são verdadeiros.
d. Os itens i e iii são verdadeiros.
e. Todos itens são verdadeiros.
A respeito da definição e tarefas dos Montadores (Assemblers), Ligadores (Linkers) e 
Carregadores (Loaders) analise as afirmativas a seguir e assinale a alternativa correta.
i) Os montadores são encarregados da tradução do programa escrito em linguagem de 
montagem (assembly) para um programa equivalente escrito em linguagem de máquina, isto é,
com o conjunto de instruções da arquitetura alvo (ISA – Instruction Set Architecture).
ii) Os ligadores, llinkers ou linkeditores são programas responsáveis por unir as diferentes 
partes de um programa e construir um único executável. A sua existência é o que permite a 
modularização de um programa e o uso de bibliotecas estáticas.
iii) O Loader: é responsável pela transferência de um programa do disco para a memória 
principal, deixando-o pronto para a execução. Usualmente o carregador é parte do Sistema 
Operacional.
a. Apenas o item i é verdadeiro.
b. Apenas o item ii é verdadeiro.
c. Os itens i e ii são verdadeiros.
d. Os itens i e iii são verdadeiros.
e. Todos itens são verdadeiros.
	Questionário Unidade II
	Pergunta 1
	Supondo a expressão dada pela árvore sintática abaixo, assinale a alternativa que corresponde ao código intermediário gerado na forma de quádruplas.
	c)
	Pergunta 2
	Pergunta 3
	Pergunta 4
	Pergunta 5
	Pergunta 6
	Pergunta 7
	Pergunta 8
	Pergunta 9
	Pergunta 10

Continue navegando