Buscar

Linguagens e Compiladores Univesp Semana 4 nota 10

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 3 páginas

Prévia do material em texto

PERGUNTA 1 
1. A expressão “x = 4/2;” sempre é válida. Porém, a expressão x=a/b pode ser inválida. Por que 
isso acontece? 
 
a. x=a/b gera um erro de sintaxe. 
 
b. a expressão x=a/b gera um erro que é detectável pelo compilador. 
 
c. um programa sempre executa seguindo inteiramente sua árvore sintática. 
 
d. os valores armazenados na tabela de símbolos podem alterar o fluxo de execução de 
um programa. 
 
e. a expressão a/b deve ser definida como um token único. 
1 pontos 
PERGUNTA 2 
1. Qual das partes de um compilador aponta erro quando executamos o programa (em C): 
 
int 5variavel = 50+60+70+90+40; 
 
a. o analisador sintático, pois a expressão à direita não é uma expressão válida. 
 
b. o analisador léxico, pois não é permitido declarar símbolos que começam com um 
número. 
 
c. o analisador sintático, pois a atribuição não pode ser combinada com a declaração de 
variáveis. 
 
d. o analisador léxico, pois não é possível somar vários inteiros em uma mesma 
expressão. 
 
e. o analisador sintático, pois o compilador não permite atribuir tipos float a tipos int. 
1 pontos 
PERGUNTA 3 
1. Das alternativas abaixo, aponte qual contém uma linha que potencialmente gera um erro que 
não pode ser detectado em tempo de compilação. 
 
a. x = y + a b 
 
b. x = ((10 + 60.3) 
 
c. x = 10,.,3 
 
d. x = log(y) 
 
e. x = “teste” + 90.3 
1 pontos 
PERGUNTA 4 
1. Um atributo é: 
 
a. uma pessoa que se voluntaria para participar de um desafio. 
 
b. uma Máquina de Turing. 
 
c. uma propriedade de um elemento numa linguagem de programação. 
 
d. um algoritmo de propósito geral. 
 
e. uma qualidade positiva de um indivíduo. 
1 pontos 
PERGUNTA 5 
1. Em uma calculadora, temos dois tipos de tokens: inteiros (INT), cujo atributo val é o inteiro em 
questão, e operador (OP), cujo atributo op diz qual é o operador em questão. 
 
Definimos as regras: 
X → INT { X.val = INT.val } 
Y → INT { Y.val = INT.val } 
Z → INT { Z.val = INT.val } 
X → Y OP Z { if (OP.op==’+’) X.val = Y.val - Z.val } 
 
Qual deve ser o atributo val encontrado quando executarmos: 
5+3 
 
a. 0 
 
b. Nenhum, o programa gera erro de sintaxe 
 
c. -2 
 
d. 8 
 
e. 2 
1 pontos 
PERGUNTA 6 
1. A gramática de atributos serve para: 
 
a. criar novos atributos. 
 
b. identificar erros de sintaxe na string de entrada. 
 
c. identificar tokens na string de entrada. 
 
d. reordenar a árvore sintática. 
 
e. calcular atributos a partir de outros atributos. 
1 pontos 
PERGUNTA 7 
1. O Yacc usa o seguinte esquema de tradução: 
 
a. L-atribuído, pois gera analisadores sintáticos ascendentes. 
 
b. L-atribuído, pois gera analisadores sintáticos descendentes. 
 
c. S-atribuído, pois gera analisadores sintáticos ascendentes. 
 
d. não-atribuído, pois gera analisadores léxicos. 
 
e. S-atribuído, pois gera analisadores sintáticos descendentes. 
1 pontos 
PERGUNTA 8 
1. Escolha a regra gramatical que permite converter uma string em notação infixa para notação 
pós-fixa: 
 
a. X → Y Z ‘+’{ print(Z.val) print(Y.val) print(‘+’) } 
 
b. X → Y Z { X.val = Y.val + Z.val} 
 
c. X → Y ‘+’ Z { print(Z.val) print(Y.val) print(‘+’) } 
 
d. X → ‘+’ Y Z { print(Z.val) print(Y.val) print(‘+’) } 
 
e. X → Y ‘+’ Z { print(Z.val + Y.val) print(‘+’) } 
1 pontos 
PERGUNTA 9 
1. Uma tabela de símbolos é implementada, em geral, usando uma tabela hash. Essa estrutura 
de dados é usada porque: 
 
a. permite guardar grandes quantidades de dados, distribuídos por várias máquinas. 
 
b. permite remoção em O(1). 
 
c. ocupa menos memória que outras soluções. 
 
d. criptografa automaticamente as suas entradas. 
 
e. permite inserção e busca em O(1). 
1 pontos 
PERGUNTA 10 
1. Usando o analisador redutivo (bottom-up) estendido com ações semânticas a seguir (e duas 
pilhas, uma de análise e outra de atributos), determine o resultado da operação quando a 
entrada é “(4+3)+6/2” e anote a sequência de análise com as duas pilhas: 
L → E = {imprime(Atributo[topo])} 
E → E1 + T {Atributo[topo] := Atributo[topo-2] + Atributo[topo]} 
E → T 
T → T1 / F {Atributo[topo] := Atributo[topo-2] / Atributo[topo]} 
T → F 
T → ( E ) {Atributo[topo] := Atributo[topo-1]} 
F → num {Atributo[topo] := num.lexval} 
Pode-se afirmar que: 
 
a. O resultado é 10, e esse é o resultado mostrado. 
 
b. O resultado é 6, considerando divisão inteira. 
 
c. O resultado é 10, mas não é o resultado mostrado, porque, ao se imprimir, o valor do atributo 
não é o calculado, mas o anterior. 
 
d. O resultado é 12, o que mostra a presença de algum erro nas ações semânticas. 
 
e. Não se chega a um resultado porque uma operação que surge é + *, sem operando. 
1 pontos

Outros materiais