Prévia do material em texto
· Pergunta 1 0,5 em 0,5 pontos Considere as seguintes afirmações: I. Compiladores traduzem todo o código-fonte para código de máquina de uma só vez, gerando um arquivo executável, que pode ser executado repetidamente sem a necessidade de nova tradução. II. Interpretadores traduzem e executam o código linha por linha, e, portanto, sempre que o programa for executado, ele precisa ser novamente interpretado. III. Atualmente a estratégia de interpretação está em desuso. Está correto o que se afirma em: Resposta Selecionada: a. I e II, apenas. Respostas: a. I e II, apenas. b. I e III, apenas. c. II e III, apenas. d. I, II e III. e. I, apenas. Comentário da resposta: Resposta: A Comentário: As asserções I e II definem compiladores e interpretadores, respectivamente. A linguagem Java é hibrida, ou seja, é compilada para bytecode, porém, interpretada para código de máquina e, portanto, faz uso do conceito de interpretação. · Pergunta 2 0,5 em 0,5 pontos Assinalar a alternativa correta: Resposta Selecionada: a. A análise léxica tem como principal funcionalidade ler o fluxo de caracteres que compõem o programa fonte e os agrupa em sequências significativas, chamadas lexemas. Respostas: a. A análise léxica tem como principal funcionalidade ler o fluxo de caracteres que compõem o programa fonte e os agrupa em sequências significativas, chamadas lexemas. b. O analisador léxico do compilador recebe como entrada os tokens e cria uma representação intermediária da sequência de tokens a partir de um conjunto de regras. c. Na análise sintática são realizadas verificações a fim de assegurar que os componentes do programa estão agrupados corretamente de acordo com a semântica da linguagem. d. Códigos de três endereços são exemplos de código objeto. e. Pilhas são exemplos de código objeto. Comentário da resposta: Resposta: A Comentário: A definição correta de análise léxica é a que se apresenta na alternativa a). Na alternativa b) é definido analisador sintático em vez de léxico. Na alternativa c) é definida análise semântica em vez de análise sintática. Códigos de três endereços são códigos intermediários e não código objeto. Pilhas não são código objeto e sim estratégia de organização da memória. · Pergunta 3 0,5 em 0,5 pontos Assinale a alternativa incorreta: Resposta Selecionada: e. Gramáticas livres de contexto são dispositivos aceitadores da sintaxe das linguagens de programação. Respostas: a. Gramáticas regulares são dispositivos geradores das linguagens regulares. b. Autômatos finitos são dispositivos reconhecedores das linguagens regulares. c. Padrões de tokens podem ser especificados por expressões regulares. d. Gramáticas de atributos são empregadas na análise semântica do compilador. e. Gramáticas livres de contexto são dispositivos aceitadores da sintaxe das linguagens de programação. Comentário da resposta: Resposta: E Comentário: Diz-se que as gramáticas são dispositivos geradores de uma linguagem. Os compiladores empregam regras de gramáticas livres de contexto e a partir destas gera a árvore de derivação durante a análise sintática. · Pergunta 4 0,5 em 0,5 pontos Considere as seguintes asserções: I. Os autômatos finitos são estruturas formais pertinentes aos dispositivos reconhecedores das linguagens regulares. PORQUE II. Os diagramas de estado representam graficamente qualquer autômato finito e consequentemente qualquer linguagem regular. Assinale a alternativa correta: Resposta Selecionada: b. I e II são verdadeiras, mas II não justifica I. Respostas: a. I e II são verdadeiras e II justifica I. b. I e II são verdadeiras, mas II não justifica I. c. Apenas I é verdadeira. d. Apenas II é verdadeira. e. I e II são falsas. Comentário da resposta: Resposta: B Comentário: Embora ambas as afirmações sejam verdadeiras, o fato de diagramas de estado representarem autômatos finitos não justifica diretamente que autômatos finitos são reconhecedores de linguagens regulares. Em vez disso, os diagramas de estado são empregados também em modelagem de sistemas, são usados para descrever o comportamento de sistemas embarcados etc. · Pergunta 5 0,5 em 0,5 pontos Cadeias de letras, dígitos e sublinhados constituem os identificadores da linguagem C. Considere as seguintes definições regulares: I. letra_ → [A-Za-z_] II. digito → [0-9] III. id → letra_(letra|digito)* Assinale a alternativa que apresenta uma afirmação falsa: Resposta Selecionada: d. A cadeia 0a_x apresenta o padrão especificado pela definição id → letra_(letra|digito)*. Respostas: a. A definição regular letra_ → [A-Za-z_] define que uma letra_ pode ser qualquer letra ou mesmo o símbolo “_”. b. A definição de dígito no item II é abreviação da digito → 0 | 1 |2 | 3 | 4 | 5 | 6 | 7 | 8 | 9. c. A cadeia a0_x apresenta o padrão especificado pela definição id → letra_(letra|digito)*. d. A cadeia 0a_x apresenta o padrão especificado pela definição id → letra_(letra|digito)*. e. A cadeia 0a_x0 apresenta o padrão especificado pela definição id → letra_(letra|digito)*. Comentário da resposta: Resposta: D Comentário: A definição id → letra_(letra|digito)* especifica que o primeiro símbolo de um id deve ser obrigatoriamente uma letra_, ou seja qualquer letra maiúscula ou minúscula ou mesmo um símbolo “_”. · Pergunta 6 0,5 em 0,5 pontos Assinale a alternativa correta: Resposta Selecionada: b. Para tokens da classe constante inteira, o valor do token pode ser o número inteiro representado pela constante. Respostas: a. Todos os tokens têm valor associado. b. Para tokens da classe constante inteira, o valor do token pode ser o número inteiro representado pela constante. c. Os compiladores modernos não atribuem valor aos tokens. d. O analisador léxico não pode realizar ações que não sejam aquelas de classificar a sequência de caracteres em tokens. e. Não há como especificar formalmente os tokens, pois se trata de um aspecto dependente de contexto das linguagens de programação. Comentário da resposta: Resposta: B Comentário: Uma das ações auxiliares do analisador léxico é atribuir o valor numérico às constantes inteiras ou reais. Tão logo um token seja identificado, seu valor também é armazenado. · Pergunta 7 0,5 em 0,5 pontos Considere uma linguagem de programação em que a sintaxe de uma operação aritmética seja dada pela seguinte gramática: S → var = E; | var = E; S E → E + E | E - E | E * E | E/E | E(E) | var. Assinale a alternativa correta: Resposta Selecionada: d. A gramática presente no enunciado é livre de contexto. Respostas: a. A detecção de erro em uma sentença gerada por esta gramática está fora do escopo da análise sintática. b. A gramática presente no enunciado é regular. c. A detecção de erro em uma sentença gerada por esta gramática está no escopo da análise semântica. d. A gramática presente no enunciado é livre de contexto. e. A gramática presente no enunciado é denominada gramática de atributos aritméticos. Comentário da resposta: Resposta: D Comentário: A gramática presente no enunciado apresenta produções da forma: A→ β, onde: A∈ V e β∈ (V ∪ T) *, ou seja, no lado esquerdo da produção deve existir um e, apenas um, símbolo não terminal e, no lado direito da produção, podem figurar quaisquer cadeias de símbolos, sejam terminais, não terminais e até mesmo isoladamente, a cadeia vazia. · Pergunta 8 0,5 em 0,5 pontos A análise semântica faz uso do formalismo denominado: Resposta Selecionada: c. Gramática de atributos. Respostas: a. Gramática livre de contexto. b. Gramática dependente de contexto. c. Gramática de atributos.d. Expressões semânticas. e. Recuperação local semântica. Comentário da resposta: Resposta: C Comentário: As dependências de contexto não podem ser descritas por formalismos livres de contexto. Um formalismo capaz de efetuar associações entre objetos da linguagem e os atributos declarados para os mesmos, funcionalidade própria da análise semântica, é a gramática de atributos. · Pergunta 9 0,5 em 0,5 pontos Assinale a alternativa correta: Resposta Selecionada: a. Nem todas as linguagens livres de contexto permitem a construção de analisadores determinísticos. Respostas: a. Nem todas as linguagens livres de contexto permitem a construção de analisadores determinísticos. b. O subconjunto de gramáticas livres de contexto que permite a construção de reconhecedores ascendentes é denominado LL(k). c. Os reconhecedores descendentes podem apresentar gramáticas com recursividade à esquerda. d. Os reconhecedores descendentes não devem apresentar gramáticas fatoradas à esquerda e nem à direita. e. Os reconhecedores descendentes podem apresentar somente gramáticas com recursões indiretas à esquerda. Comentário da resposta: Resposta: A Comentário: O subconjunto das gramáticas livres de contexto, que permite a construção de reconhecedores determinísticos descendentes é denominado LL(k). As gramáticas devem ser fatoradas à esquerda e isentas de recursividade à esquerda. · Pergunta 10 0,5 em 0,5 pontos Sobre os analisadores que efetuam análise recursiva preditiva: Resposta Selecionada: b. Seu projeto faz uso do conjunto “First” dos símbolos não terminais. Respostas: a. Permitem que a linguagem que apresente a gramática tenha recursividade à esquerda. b. Seu projeto faz uso do conjunto “First” dos símbolos não terminais. c. Não devem apresentar gramáticas fatoradas à esquerda e nem à direita. d. Fazem uso da gramática de atributos. e. Fazem uso de gramáticas ambíguas. Comentário da resposta: Resposta: B Comentário: Estes analisadores exigem não somente que a gramática não tenha recursividade à esquerda e que a gramática esteja fatorada à esquerda, mas também que, para os não terminais com mais de uma regra de produção, os primeiros terminais deriváveis sejam capazes de identificar, univocamente, a produção que deve ser aplicada a cada instante da análise. Para tanto, fazem uso do conjunto First dos símbolos não terminais. image1.gif image2.gif