100% acharam este documento útil (1 voto)
73 visualizações5 páginas

Análise de Gramáticas e Compiladores

Este documento contém perguntas sobre compiladores e linguagens de programação. As perguntas abordam tópicos como gramáticas de atributos, analisadores LR(1), geração de código intermediário e montagem de programas. O documento fornece várias alternativas de resposta para cada pergunta.

Enviado por

Al Mossar
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
100% acharam este documento útil (1 voto)
73 visualizações5 páginas

Análise de Gramáticas e Compiladores

Este documento contém perguntas sobre compiladores e linguagens de programação. As perguntas abordam tópicos como gramáticas de atributos, analisadores LR(1), geração de código intermediário e montagem de programas. O documento fornece várias alternativas de resposta para cada pergunta.

Enviado por

Al Mossar
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Pergunta 1 0,5 em 0,5 pontos

A sintaxe geralmente é de�nida 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 identi�cadores.
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 quanti�car 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.

Resposta Selecionada: e. Todos itens são verdadeiros.

Pergunta 2 0,5 em 0,5 pontos

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 con�gura 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 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 .
Quando todos os símbolos tiverem sido encontrados, ou seja, tivermos um item na forma
é possível então realizar a redução da sequência correspondente por A.
Supondo a gramática dada a seguir:

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.

← OK
Resposta Selecionada:

d.

Pergunta 3 0,5 em 0,5 pontos

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 a�rmativas 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élula
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 à 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.

Resposta Selecionada: c. Os itens I e II são verdadeiros.


Pergunta 4 0,5 em 0,5 pontos

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.

Resposta Selecionada: e. Todos itens são verdadeiros.

Pergunta 5 0,5 em 0,5 pontos

Usualmente a geração de código acontece em duas etapas. Primeiramente ocorre a tradução da


estrutura do programa para um código em linguagem intermediária e em seguida, esse código
dado linguagem intermediária é então traduzido para a linguagem simbólica do processador-
alvo. A esse respeito julgue as a�rmativas a seguir e assinale a alternativa correta.
I - Permitir o reaproveitamento de código, facilitando a portabilidade de um compilador para
diversas plataformas, uma vez que apenas os módulos �nais precisam ser refeitos a cada nova
plataforma de hardware.
II - Permitir a utilização de um otimizador de código que analise aspectos independentemente de
máquina e melhore o código intermediário antes de uma tradução de�nitiva.
III - Permitir uma compilação portável para diferentes arquiteturas e sistemas operacionais
independente de qual seja a linguagem fonte.

Resposta Selecionada: c. Os itens I e II são verdadeiros.

Pergunta 6 0,5 em 0,5 pontos

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.
Resposta Selecionada:

b.

Pergunta 7 0,5 em 0,5 pontos

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.

Resposta Selecionada:

a.

Pergunta 8 0,5 em 0,5 pontos

A respeito da de�nição e tarefas dos Montadores ( Assemblers), Ligadores ( Linkers) e


Carregadores ( Loaders) analise as a�rmativas 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.

Resposta Selecionada: e. Todos itens são verdadeiros.

Pergunta 9 0,5 em 0,5 pontos

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 identi�cadores que participam de suas análises, como por
exemplo, para recuperar os tipos dos identi�cadores envolvidos no cálculo de uma expressão
com o propósito de veri�car a compatibilidade entre eles.
Sobre a tabela de símbolos e a análise semântica é incorreto a�rmar que:

Resposta a.
Selecionada: Questões relacionadas a declaração prévia dos identi�cadores, escopo de
utilização e a veri�caçã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.

Pergunta 10 0,5 em 0,5 pontos

A respeito dos Carregadores (Loaders) é incorreto a�rmar:

Resposta e.
Selecionada: Reunir os módulos objeto em um único elemento chamado de módulo
absoluto de carga.

Você também pode gostar