Baixe o app para aproveitar ainda mais
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
Compartilhar