Logo Passei Direto
Buscar

QST COMPILADORES

Ferramentas de estudo

Questões resolvidas

Considere a seguinte gramática S → XYZ X → aXb | ε Y → cYZcX | d Z → eZYe | f
Qual seria o conjunto First de S?
{ a, d}
{a, c, d}
{a, c, e}
{a, c, d, e}
{c, d, e}

Considere que, em uma linguagem de programação hipotética, um comando condicional IF exija o uso de THEN, representando a cláusula então.
Nesse caso, se a instrução THEN não for usada no código fonte, uma resposta do compilador na identificação do erro de programação estará
no nível sintático
no nível lógico
nos níveis sintático e semântico, ao mesmo tempo
no nível semântico
no nível léxico

Apesar de ser considerada o terceiro passo da etapa de análise, a Análise Semântica é normalmente realizada de forma concomitante com a Análise Sintática.
A respeito da situação descrita podemos afirmar que:
I. Quando um esquema de tradução não produz efeitos colaterais ele é chamado de Gramática de Atributos.
II. O Esquema de Tradução corresponde a uma restrição aplicada a Gramática Livre de Contexto (GLC) que define a linguagem de programação.
III. A Tradução Dirigida por Sintaxe é a técnica que permite realizar a Análise Semântica de forma concomitante com a análise sintática.
I
I e III
I e II
III
II e III

O tradutor que gera um código objeto a partir de uma linguagem de baixo nível é o:
Compilador
Interpretador
Ligador
Montador
Carregador

Compiladores de linguagens de programação traduzem programas-fonte, em uma linguagem de entrada, para programas-objeto, em uma linguagem de saída. Durante o processo de tradução, o compilador deve verificar se as sentenças do programa-fonte estão sintaticamente corretas. Esse processo de análise sintática pode ser realizado construindo-se uma árvore de análise segundo duas principais abordagens: top-down, quando a árvore é investigada da raiz às folhas; ou bottom-up, das folhas à raiz.
Acerca desse assunto, julgue os itens seguintes.
I A análise top-down é adequada quando a linguagem de entrada é definida por uma gramática recursiva à esquerda.
II Independentemente da abordagem adotada, top-down ou bottom-up, o analisador sintático utiliza informações resultantes da análise léxica.
III Se os programas em uma linguagem podem ser analisados tanto em abordagem top-down como em bottom-up, a gramática dessa linguagem é ambígua.
IV A análise bottom-up utiliza ações comumente conhecidas como deslocamentos e reduções sobre as sentenças do programa-fonte.
I e II
II e IV
II, III e IV
I, III e IV
I e III

Considere a seguinte gramática: E → +EE E → *EE E → a E → b
Podemos afirmar que ela somente pode ser analisada por um Parser Descendente Preditivo Porque
Ela está fatorada e sem recursão à Esquerda
As duas afirmativas são falsas
A primeira é verdadeira e a segunda falsa
As duas são corretas e a segunda não justifica a primeira
As duas são corretas e a segunda justifica a primeira
A primeira é falsa e a segunda correta

A alocação de registradores junto com a seleção de instruções são atividades fundamentais na geração do código de montagem. Ela possui um impacto enorme no desempenho do programa já que ao se utilizar os registradores para minimizar o acesso a memória torna a execução mais eficiente. Considerando que temos uma máquina com dois registradores (r0 e r1) e com o conjunto de instruções do quadro abaixo.
Podemos afirmar que:
otimização não irá funcionar já que ela possui operadores diferentes em seus nós internos
As duas são corretas e a segunda justifica a primeira
As duas afirmativas são falsas
A primeira é falsa e a segunda correta
A primeira é verdadeira e a segunda falsa
As duas são corretas e a segunda não justifica a primeira

(EMPREL/2019 - Adaptada) Qual é o componente de um compilador que lê um fluxo de entrada (caracteres) e produz um fluxo de saída que contém palavras das quais cada uma é rotulada com sua categoria sintática, equivalente a uma classe gramatical da palavra na linguagem do programa fonte?
Otimizador.
Analisador Semântico.
Analisador Léxico.
Gerador de Código Intermediário.
Analisador Sintático.

Os compiladores, de um modo geral, são compostos de funções padronizadas, as quais compreendem a análise do programa fonte e então a síntese para a derivação do código objeto. O processo de compilação é comumente estruturado em passos que, eles são:
análise da gramática, busca binária, geração de código intermediário, geração de objeto final.
reconhecimento dos tokens iniciais e finais, análise contextual, aplicação de algoritmo de escalonamento, geração de código intermediário e geração de código objeto.
análise léxica, análise sintática, análise semântica, síntese do programa fonte e reutilização de tokens.
análise léxica, análise sintática, análise semântica, geração de código intermediário, otimização de código e geração de código.
simplificação do programa fonte, aplicação de algoritmo de escalonamento, análise contextual, geração e otimização de código.

Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Questões resolvidas

Considere a seguinte gramática S → XYZ X → aXb | ε Y → cYZcX | d Z → eZYe | f
Qual seria o conjunto First de S?
{ a, d}
{a, c, d}
{a, c, e}
{a, c, d, e}
{c, d, e}

Considere que, em uma linguagem de programação hipotética, um comando condicional IF exija o uso de THEN, representando a cláusula então.
Nesse caso, se a instrução THEN não for usada no código fonte, uma resposta do compilador na identificação do erro de programação estará
no nível sintático
no nível lógico
nos níveis sintático e semântico, ao mesmo tempo
no nível semântico
no nível léxico

Apesar de ser considerada o terceiro passo da etapa de análise, a Análise Semântica é normalmente realizada de forma concomitante com a Análise Sintática.
A respeito da situação descrita podemos afirmar que:
I. Quando um esquema de tradução não produz efeitos colaterais ele é chamado de Gramática de Atributos.
II. O Esquema de Tradução corresponde a uma restrição aplicada a Gramática Livre de Contexto (GLC) que define a linguagem de programação.
III. A Tradução Dirigida por Sintaxe é a técnica que permite realizar a Análise Semântica de forma concomitante com a análise sintática.
I
I e III
I e II
III
II e III

O tradutor que gera um código objeto a partir de uma linguagem de baixo nível é o:
Compilador
Interpretador
Ligador
Montador
Carregador

Compiladores de linguagens de programação traduzem programas-fonte, em uma linguagem de entrada, para programas-objeto, em uma linguagem de saída. Durante o processo de tradução, o compilador deve verificar se as sentenças do programa-fonte estão sintaticamente corretas. Esse processo de análise sintática pode ser realizado construindo-se uma árvore de análise segundo duas principais abordagens: top-down, quando a árvore é investigada da raiz às folhas; ou bottom-up, das folhas à raiz.
Acerca desse assunto, julgue os itens seguintes.
I A análise top-down é adequada quando a linguagem de entrada é definida por uma gramática recursiva à esquerda.
II Independentemente da abordagem adotada, top-down ou bottom-up, o analisador sintático utiliza informações resultantes da análise léxica.
III Se os programas em uma linguagem podem ser analisados tanto em abordagem top-down como em bottom-up, a gramática dessa linguagem é ambígua.
IV A análise bottom-up utiliza ações comumente conhecidas como deslocamentos e reduções sobre as sentenças do programa-fonte.
I e II
II e IV
II, III e IV
I, III e IV
I e III

Considere a seguinte gramática: E → +EE E → *EE E → a E → b
Podemos afirmar que ela somente pode ser analisada por um Parser Descendente Preditivo Porque
Ela está fatorada e sem recursão à Esquerda
As duas afirmativas são falsas
A primeira é verdadeira e a segunda falsa
As duas são corretas e a segunda não justifica a primeira
As duas são corretas e a segunda justifica a primeira
A primeira é falsa e a segunda correta

A alocação de registradores junto com a seleção de instruções são atividades fundamentais na geração do código de montagem. Ela possui um impacto enorme no desempenho do programa já que ao se utilizar os registradores para minimizar o acesso a memória torna a execução mais eficiente. Considerando que temos uma máquina com dois registradores (r0 e r1) e com o conjunto de instruções do quadro abaixo.
Podemos afirmar que:
otimização não irá funcionar já que ela possui operadores diferentes em seus nós internos
As duas são corretas e a segunda justifica a primeira
As duas afirmativas são falsas
A primeira é falsa e a segunda correta
A primeira é verdadeira e a segunda falsa
As duas são corretas e a segunda não justifica a primeira

(EMPREL/2019 - Adaptada) Qual é o componente de um compilador que lê um fluxo de entrada (caracteres) e produz um fluxo de saída que contém palavras das quais cada uma é rotulada com sua categoria sintática, equivalente a uma classe gramatical da palavra na linguagem do programa fonte?
Otimizador.
Analisador Semântico.
Analisador Léxico.
Gerador de Código Intermediário.
Analisador Sintático.

Os compiladores, de um modo geral, são compostos de funções padronizadas, as quais compreendem a análise do programa fonte e então a síntese para a derivação do código objeto. O processo de compilação é comumente estruturado em passos que, eles são:
análise da gramática, busca binária, geração de código intermediário, geração de objeto final.
reconhecimento dos tokens iniciais e finais, análise contextual, aplicação de algoritmo de escalonamento, geração de código intermediário e geração de código objeto.
análise léxica, análise sintática, análise semântica, síntese do programa fonte e reutilização de tokens.
análise léxica, análise sintática, análise semântica, geração de código intermediário, otimização de código e geração de código.
simplificação do programa fonte, aplicação de algoritmo de escalonamento, análise contextual, geração e otimização de código.

Prévia do material em texto

O que faz a análise léxica? 
 
 Lê caractere por caractere do texto encontrando sequências que 
constituem tokens; 
 Verifica se as estruturas do programa irão fazer sentido 4 durante 
a execução; 
 Verifica se a estrutura gramatical do programa está correta; 
 Tratar erros de tipo no programa fonte; 
 É um sistema que aceita como entrada um programa escrito em 
uma linguagem de programação e produz como resultado um 
programa equivalente em outra linguagem; 
Considere os seguintes passos da compilação: 
I. Otimização 
II. Análise Léxica 
III. Geração de Código 
IV. Geração de Código Intermediário 
V. Análise Semântica 
VI. Análise Sintática 
A ordem correta dos passos durante a compilação é: 
 
 III, V, VI, IV, I e II 
 II, V, VI, IV, I e III 
 II, VI, V, IV, I e III 
 III, IV, VI, V, I e II 
 III, IV, V, VI, I e II 
 
Os Meta-caracteres são caracteres especiais na especificação de 
Expressões Regulares, que aumentam muito sua expressividade. Eles 
podem ser quantificadores, definidores de classes de caracteres, 
definidores de lista etc.... 
O Meta-caracter que corresponde a seguinte classe [A-Za-z0-9] é o 
A ordem correta dos passos durante a compilação é: 
 
 \d 
 \c 
 \w 
 \W 
 \C 
 
 
 
O GALS é um gerador de analisadores léxicos que a partir de 
expressões regulares cria um autômato finito determinístico que as 
analisa. 
Para que possa funcionar ele deve ter os seus tokens especificados. 
Como seria a especificação do token no GALS para 
identificadores (Id) formados pela primeira letra maiúscula sendo 
seguido de pelo menos uma ou mais letras minúsculas deverá existir 
pelo menos um letra? 
 
 Id:[A-Z] [a-z]+. 
 Id: [A-Za-z]+ 
 Id:[A-Z]* 
 Id:[A-Z] [a-z]*. 
 Id:[a-z]+ 
Considere a seguinte gramática 
S → XYZ 
X → aXb | ε 
Y → cYZcX | d 
Z → eZYe | f 
Levando-se em conta a necessidade de criar a tabela sintática, seriam gerados os 
conjuntos First e Follow de cada um dos não terminais. 
Qual seria o conjunto First de S? 
 
 
{a, c, d, e} 
 
{ a, d} 
 
{a, c, e} 
 {a, c, d} 
 
{c, d, e} 
 
ANO: 2010 BANCA: CESPE ÓRGÃO: INMETRO PROVA: PESQUISADOR - CIÊNCIAS DA 
COMPUTAÇÃO 
Considere que, em uma linguagem de programação hipotética, um comando condicional 
IF exija o uso de THEN, representando a cláusula então. Nesse caso, se a instrução 
THEN não for usada no código fonte, uma resposta do compilador na identificação do 
erro de programação estará 
 
 no nível sintático 
 
no nível lógico 
 
nos níveis sintático e semântico, ao mesmo tempo 
 
no nível semântico 
 
no nível léxico 
 
 
 
As árvores de sintaxe são a forma mais comum de representação intermediária gráfica. 
Dentre estas árvores temos as de Derivação, Sintática e Derivação Anotada. 
Com relação a estas árvores avalie as afirmativas abaixo: 
I. Decorar uma árvore é o ato de, durante a fase de parser, realizar a associação dos 
símbolos aos seus atributos na árvore de derivação. 
II. A Árvore Sintática é obtida eliminando-se os nós referentes aos símbolos não 
terminais na árvore de derivação. 
III. A árvore de Derivação possui em suas folhas apenas símbolos não terminais. 
Podemos afirmar que está correto o que se afirma apenas em: 
 
 
II 
 
I e III 
 
II e III 
 I e II 
 
III 
 
Apesar de ser considerada o terceiro passo da etapa de análise, a Análise Semântica é 
normalmente realizada de forma concomitante com a Análise Sintática, sendo que o 
parser vai executar as ações semânticas estabelecidas para as produções da 
gramática. 
A respeito da situação descrita podemos afirmar que: 
I. Quando um esquema de tradução não produz efeitos colaterais ele é chamado de 
Gramática de Atributos. 
II. O Esquema de Tradução corresponde a uma restrição aplicada a Gramática Livre de 
Contexto (GLC) que define a linguagem de programação. 
III. A Tradução Dirigida por Sintaxe é a técnica que permite realizar a Análise 
Semântica de forma concomitante com a análise sintática. 
É correto o que se afirma apenas em: 
 
 
I 
 
I e III 
 
I e II 
 III 
 II e III 
 
Apesar de ser considerada o terceiro passo da etapa de análise, a Análise Semântica é 
normalmente realizada de forma concomitante com a Análise Sintática, sendo que o 
parser vai executar as ações semânticas estabelecidas para as produções da 
gramática. 
A respeito da situação descrita podemos afirmar que: 
I. Quando um esquema de tradução não produz efeitos colaterais ele é chamado de 
Gramática de Atributos. 
II. O Esquema de Tradução corresponde a uma restrição aplicada a Gramática Livre de 
Contexto (GLC) que define a linguagem de programação. 
III. A Tradução Dirigida por Sintaxe é a técnica que permite realizar a Análise 
Semântica de forma concomitante com a análise sintática. 
É correto o que se afirma apenas em: 
 
 
I 
 
I e III 
 
I e II 
 III 
 II e III 
 
Existem varios tipos de representações intermediárias tanto graficas como textuais. 
Durante a fase de síntese a Geração de Código Intermediário irá transformar o 
resultado da fase de análise em uma outra representação. 
Uma das formas de representação intermediária é a notação posfixa. 
Considerando a seguinte expressão em notação infixa (a+b)*(c+d) 
qual seria a notação posfixa correspondente? 
 
 a b * + c d + 
 
a b + * c d + 
 
a b + c d * + 
 a b + c d + * 
 
a b * c d + + 
 
O tradutor que gera um código objeto a partir de uma linguagem de 
baixo nível é o : 
 
 Montador 
 Compilador 
 Ligador 
 Carregador 
 Interpretador 
 
Considere os seguintes passos da compilação: 
I. Otimização 
II. Análise Léxica 
III. Geração de Código 
IV. Geração de Código Intermediário 
V. Análise Semântica 
VI. Análise Sintática 
A ordem correta dos passos durante a compilação é: 
 
 III, V, VI, IV, I e II 
 II, V, VI, IV, I e III 
 III, IV, VI, V, I e II 
 III, IV, V, VI, I e II 
 II, VI, V, IV, I e III 
 
Os Meta-caracteres são caracteres especiais na especificação de 
Expressões Regulares, que aumentam muito sua expressividade. Eles 
podem ser quantificadores, definidores de classes de caracteres, 
definidores de lista etc.... 
O Meta-caracter que corresponde a seguinte classe [A-Za-z0-9] é o 
A ordem correta dos passos durante a compilação é: 
 
 \d 
 \C 
 \W 
 \c 
 \w 
O GALS é um gerador de analisadores léxicos que a partir de 
expressões regulares cria um autômato finito determinístico que as 
analisa. 
Para que possa funcionar ele deve ter os seus tokens especificados. 
Como seria a especificação do token no GALS para 
identificadores (Id) formados pela primeira letra maiúscula sendo 
seguido de pelo menos uma ou mais letras minúsculas deverá existir 
pelo menos um letra? 
 
 Id:[A-Z]* 
 Id: [A-Za-z]+ 
 Id:[A-Z] [a-z]*. 
 Id:[A-Z] [a-z]+. 
 Id:[a-z]+ 
 
Considere a seguinte gramática 
S → XYZ 
X → aXb | ε 
Y → cYZcX | d 
Z → eZYe | f 
Levando-se em conta a necessidade de criar a tabela sintática, seriam gerados os 
conjuntos First e Follow de cada um dos não terminais. 
Qual seria o conjunto First de S? 
 
 {c, d, e} 
 {a, c, d} 
 
{a, c, d, e} 
 
{ a, d} 
 
{a, c, e} 
 
ANO: 2010 BANCA: CESPE ÓRGÃO: INMETRO PROVA: PESQUISADOR - CIÊNCIAS DA 
COMPUTAÇÃO 
Considere que, em uma linguagem de programação hipotética, um comando condicional 
IF exija o uso de THEN, representando a cláusula então. Nesse caso, se a instrução 
THEN não for usada no código fonte, uma resposta do compilador na identificação do 
erro de programação estará 
 
 
no nível semântico 
 
no nível léxico 
 
no nível lógico 
 no nível sintático 
 
nos níveis sintático e semântico, ao mesmo tempo 
 
As árvores de sintaxe são a forma mais comum de representação intermediária gráfica. 
Dentre estas árvores temos as de Derivação, Sintática e Derivação Anotada. 
Com relação a estas árvores avalie as afirmativas abaixo: 
I. Decorar uma árvore é o ato de,durante a fase de parser, realizar a associação dos 
símbolos aos seus atributos na árvore de derivação. 
II. A Árvore Sintática é obtida eliminando-se os nós referentes aos símbolos não 
terminais na árvore de derivação. 
III. A árvore de Derivação possui em suas folhas apenas símbolos não terminais. 
Podemos afirmar que está correto o que se afirma apenas em: 
 
 I e III 
 
II e III 
 I e II 
 
II 
 
III 
 
 
 
 
 
 
 
 
 
Verificação de tipos é uma atividade extremamente importante na análise semântica já 
que determinados erros somente são percebidos nesta atividade, pois passam 
despercebidos nas Análises Léxicas e Sintáticas. 
Considere o seguinte trecho de programa : 
inteiro a,b,c; 
{ 
.... 
c:= a + b; 
.... 
} 
 
Quanto a expressão c:= a + b; podemos afirmar que: 
 
O seu tipo será inteiro 
porque 
todos os operandos são do tipo inteiro 
 
Com base nas afirmativas podemos concluir que: 
 
 
As duas são corretas e a segunda não justifica a primeira 
 
As duas afirmativas são falsas 
 
A primeira é falsa e a segunda correta 
 As duas são corretas e a segunda justifica a primeira 
 
A primeira é verdadeira e a segunda falsa 
 
 
 
 
 
 
 
 
 
 
Procedimentos são rotinas que complementam as funcionalidades de um programa. 
Quando um procedimento é chamado um Registro de Ativação é criado e colocado na 
pilha. 
Neste registro são armazenadas a variáveis locais, o contexto e os parametrosdo 
procedimento. 
Com base nisso considere a seguinte expressão onde p1 e p2 são funções 
x = p1 (a, p2(b)); 
Sabendo-se que o código abaixo mostra a implementação do trecho em código 
intermediário em que ?1, ?2, ?3 e ?4 representam partes faltantes do código . 
 
param a 
param b 
_t1 := call ?1, ?2 
param _t1 
x := call ?3, ?4 
 
Quais seriam os valores de ?1, ?2, ?3 e ?4 respectivamente? 
 
 p2 - 2 - p1 - 2 
 
p1 - 1 - p2 - 2 
 p2 - 1 - p1 - 2 
 
p2 - 2 - p1 - 1 
 
p1 - 2 - p2 - 1 
 
Existem varios tipos de representações intermediárias tanto graficas como textuais. 
Durante a fase de síntese a Geração de Código Intermediário irá transformar o 
resultado da fase de análise em uma outra representação. 
Uma das formas de representação intermediária é a notação posfixa. 
Considerando a seguinte expressão em notação infixa (a+b)*(c+d) 
qual seria a notação posfixa correspondente? 
 
 
a b * + c d + 
 
a b + c d * + 
 a b + c d + * 
 a b * c d + + 
 
a b + * c d + 
 
 
Autômato Finito é formalmente definido por uma quíntupla como por 
exemplo esta: 
Q = número de estados = {S0, S1, S2, S3,S4,S5} 
ΣΣ = símbolos de entrada = {A,E,M,O,S} 
δδ = transições = 
δδ (S0,S) = S1 
δδ (S1,E) = S2 
δδ (S1,O) = S3 
δδ (S3,M)= S4 
δδ (S4,A) = S5 
q0 = estado inicial = {S0} 
F = conjunto de estados finais = {S3,S5} 
Sabendo-se que os estados finais quando atingidos caracterizam que a 
palavra foi aceita, que palavras seriam aceitas por este autômato? 
 
 "Mesa" e "Ema" 
 "Se" e "Soma" 
 "Mesa" e "So" 
 "Som" e "Sema" 
 "So" e "Sema" 
 
O GALS além dos tokens permite a escrita de definição regulares que 
facilitam a construção do tokens. 
Observe a figura abaixo: 
 
Ela faz a especificação de um token chamado ID, qual das opções abaixo 
apresenta o único lexema que atende a especificação: 
 
 3A 
 A3 
 A3A 
 AA3 
 AA. 
 
Tabela de símbolos implementadas como tabelas hash implicam no uso de uma fórmula, 
denominada fórmula de hash que a partir de algum tipo de cálculo define o índice do slot 
onde o símbolo será armazenado. 
Fórmulas de hashing bem selecionadas produzem um espalhamento dos símbolos por 
diferentes slots, com base nisso podemos afirmar que apesar de não 
existirem fórmulas perfeitas se eventualmente dois símbolos gerarem o mesmo índice não 
ocorrerá uma colisão porque métodos como Endereçamento Aberto e Hashing Aberto 
fazem com que os símbolos sejam armazenados em locais diferentes. 
Com base nas afirmativas acima podemos concluir que: 
 
 
A primeira é verdadeira e a segunda falsa 
 A primeira é falsa e a segunda correta 
 
As duas são corretas e a segunda não justifica a primeira 
 As duas são corretas e a segunda justifica a primeira 
 
As duas afirmativas são falsas 
 
As representações intermediárias lineares são utilizadas para produzir o resultado da 
Análise Semântica. 
As respeito destas representações analise as seguintes afirmativas: 
I. Código de máquina de pilha é um exemplo de código de um endereço 
II. Códigos de um endereço utilizam nomes implícitos 
III. Códigos de dois endereços não utilizam operações destrutivas. 
IV. Código de três endereços possuem o formato básico r ← x op y 
Estão corretas apenas as afirmativas: 
 
 I, II e IV 
 
II e III 
 I e IV 
 
II, III e IV {ε} 
 
I, II e III 
 
Enade 2008 
Compiladores de linguagens de programação traduzem programas-fonte, em uma 
linguagem de entrada, para programas-objeto, em uma linguagem de saída. Durante o 
processo de tradução, o compilador deve verificar se as sentenças do programa-fonte 
estão sintaticamente corretas. 
Esse processo de análise sintática pode ser realizado construindo-se uma árvore de análise 
segundo duas principais abordagens: top-down, quando a árvore é investigada da raiz às 
folhas; ou bottom-up, das folhas à raiz. 
Acerca desse assunto, julgue os itens seguintes. 
I A análise top-down é adequada quando a linguagem de entrada é definida por uma 
gramática recursiva à esquerda. 
II Independentemente da abordagem adotada, top-down ou bottom-up, o analisador 
sintático utiliza informações resultantes da análise léxica. 
III Se os programas em uma linguagem podem ser analisados tanto em abordagem top-
down como em bottom-up, a gramática dessa linguagem é ambígua. 
IV A análise bottom-up utiliza ações comumente conhecidas como deslocamentos e 
reduções sobre as sentenças do programa-fonte. 
Estão certos apenas os itens 
 
 
I e II 
 II e IV 
 
II, III e IV 
 
I, III e IV 
 
I e III 
 
Considere a seguinte gramática: 
E → +EE 
E → *EE 
E → a 
E → b 
Podemos afirmar que ela somente pode ser analisada por um Parser Descendente Preditivo 
Porque 
Ela está fatorada e sem recursão à Esquerda 
Como base nas afirmativas acima podemos concluir que: 
 
 
As duas afirmativas são falsas 
 
A primeira é verdadeira e a segunda falsa 
 
As duas são corretas e a segunda não justifica a primeira 
 As duas são corretas e a segunda justifica a primeira 
 A primeira é falsa e a segunda correta 
 
 
 
 
 
 
 
 
 
 
 
A alocação de registradores junto com a seleção de instruções são atividades fundamentais na 
geração do código de montagem. Ela possui um impacto enorme no desempenho do programa já 
que ao se utilizar os registradores para minimizar o acesso a memória torna a execução mais 
eficiente. 
Considerando que temos uma máquina com dois registradores (r0 e r1) e com o conjunto de 
instruções do quadro abaixo 
 
Sub r0 bMove r0 a 
Move r1 c 
Add r1 r0 
Move x r1 
Move r1 d 
Mult r1 e 
Add r0 f 
Move y r1 
Add x r1 
Move x r1 
Move z r0 
Move w r1 
Podemos afirmar que: 
A instrução Move y r1 foi necessária para derramar o conteúdo de r1 em Y 
Porque 
Era necessário liberar o um registrador para poder continuar a execução do programa da forma 
mais eficiente. 
Com base nas afirmativas acima podemos concluir que: 
 
 As duas afirmativas são falsas 
 
As duas são corretas e a segunda não justifica a primeira 
 
A primeira é verdadeira e a segunda falsa 
 As duas são corretas e a segunda justifica a primeira 
 
A primeira é falsa e a segunda correta 
 
Computadores modernos fazem amplo uso do multiprocessamento , pois possuem vários 
núcleos o que permite a execução em paralelo de várias instruções de um mesmo 
programa. 
Este recurso pode ser utilizado na otimização do código para partir da diminuição da altura 
da árvore sintática ea alocação das operações nos vários núcleos. 
Dentro desta concepção analise a Árvore Sintática abaixo que se originou de outra árvore 
de altura maior 
 
Com base na análise podemos afirmar que: 
 
Está árvore é uma tentativa de utilizar o multiprocessamento para a sequência de 
operações 
Porém 
A otimização não irá funcionar já que ela possui operadores diferentes em seus nós 
internos 
 
Com base nas afirmativas acima podemos concluir que: 
 
 As duas são corretas e a segunda justifica a primeira 
 
As duas afirmativas são falsas 
 
A primeira é falsa e a segunda correta 
 A primeira é verdadeira e a segunda falsa 
 
As duas são corretas e a segunda não justifica a primeira 
 
(EMPREL/2019 - Adaptada) Qual é o componente de um compilador que lê um fluxo de 
entrada (caracteres) e produz um fluxo de saída que contém palavras das quais cada uma 
é rotulada com sua categoria sintática, equivalente a uma classe gramatical da palavra na 
linguagem do programa fonte? 
 
 Analisador Léxico. 
 
Analisador Semântico. 
 
Otimizador. 
 Analisador Sintático. 
 
Gerador de Código Intermediário. 
 
Os compiladores, de um modo geral, são compostos de funções 
padronizadas, as quais compreendem a análise do programa fonte e 
então a síntese para a derivação do código objeto. 
O processo de compilação é comumente estruturado em passos que, eles 
são: 
 
 análise da gramática, busca binária, geração de código 
intermediário, geração de objeto final. 
 reconhecimento dos tokens iniciais e finais, análise contextual, 
aplicação de algoritmo de escalonamento, geração de código 
intermediário e geração de código objeto. 
 análise léxica, análise sintática, análise semântica, síntese do 
programa fonte e reutilização de tokens. 
 análise léxica, análise sintática, análise semântica, geração de 
código intermediário, otimização de código e geração de código. 
 simplificação do programa fonte, aplicação de algoritmo de 
escalonamento, análise contextual, geração e otimização de 
código.

Mais conteúdos dessa disciplina