Você está na página 1de 11

Iniciado em Estado

quarta-feira, 13 mar. 2024, 21:48 Finalizada

Concluída em Tempo empregado

sábado, 16 mar. 2024, 01:29 2 dias 3 horas

Avaliar

3,00 de um máximo de 3,00(100%)


Questão 1
Marcar questão
Correto Atingiu 0,35 de 0,35

Considere as seguintes gramáticas.

I. A → bA | aA | ε
II. B → BB | b
III. C → CaC, A → AcA | aca
IV. D → EE, EE → FG, F → a | aF, G → b | bG

A esse respeito, assinale a afirmativa FALSA.


Escolha uma opção:

a. A gramática I é livre de contexto.

b. A gramática III é livre de contexto.

c. A gramática IV é livre de contexto.

d. Nenhuma das gramáticas é livre de contexto.

e. A gramática II é livre de contexto.

Sua resposta está correta.


A resposta correta é:A gramática IV é livre de contexto.
Questão 2
Marcar questão
Correto Atingiu 0,35 de 0,35

Qual é a linguagem da gramática com as seguintes regras de produção:

S →ASb | c
A →a
Escolha uma opção:

a. Nenhuma das anteriores.

b. { ancb | n pertence ao naturais}

c. { acbn| n pertence ao naturais}

d. { ancnb | n pertence ao naturais}

e. { ancbn| n pertence ao naturais}

Sua resposta está correta.


A resposta correta é:{ ancbn| n pertence ao naturais}
Questão 3
Marcar questão
Correto Atingiu 0,35 de 0,35

Uma das primeiras etapas do processo de compilação é a Análise Léxica que reconhece
linguagens regulares do tipo-3, conforme a hierarquia de Chomsky. Este tipo de linguagens
tem a vantagem de ser formalmente descrita através de expressões regulares, produzindo
uma rotina que realiza essa análise. Essa rotina modela um autômato finito derivado
matematicamente das expressões regulares especificadas. Mas também pode ser
formalmente descrita por uma representação axiomática, ou seja uma gramática, também
regular (Santos e Langlois, 2018).
Santos, Pedro, R. e Thibault Langlois. Compiladores - Da Teoria à Prática. Disponível em: Minha Biblioteca,
Grupo GEN, 2018.

Considerando a gramática a seguir, em que S, A e B são símbolos não terminais, 0 e 1 são


terminais e ε é a cadeia vazia.
S → 1S | 0A | ε
A → 1S | 0B | ε
B → 1S | ε
Esta gramática é a expressão axiomática, em suas regras de produção, da representação de uma
linguagem definida pelos símbolos do alfabeto (os terminais 0 e 1). O comportamento é determinado pela
derivação das regras, que, aplicadas ao processo de análise léxica, pode definir as sentenças desta
linguagem a partir das seguintes observações:
I. Nas cadeias geradas por essa gramática, o último símbolo é sempre 1.
II. O número de zeros consecutivos nas cadeias geradas pela gramática é, no máximo,
dois.
III. O número de uns em cada cadeia gerada pela gramática é maior que o número de
zeros.
IV. Nas cadeias geradas por essa gramática, todos os uns estão à esquerda de todos os
zeros.

É correto apenas o que se afirma em

a. II.

b. I e III;

c. III e IV;

d II IV
d. II e IV;

e. I.

Sua resposta está correta.


A resposta correta é:II.

Questão 4
Marcar questão
Correto Atingiu 0,35 de 0,35

Considere uma produção pertencente a uma gramática G dada por:


L→ La S | S
Assinale a alternativa abaixo que, substituindo essa produção, elimina a recursividade à
esquerda criando uma gramática equivalente:
Escolha uma opção:

L→ S R
a.
R → a SR | ε

L→ R S
b.
R → a R S| ε

L→ S R
c.
R → S aR | ε

L→ S a R
d.
R → S aR | ε

L→RS
e.
R → a SR | ε

Sua resposta está correta.


A resposta correta é: L→ S R
R → a SR | ε
Questão 5
Marcar questão
Correto Atingiu 0,35 de 0,35

Na fase de análise sintática preditiva, uma abordagem para evitar o backtracking


(retrocesso) de símbolos e regras é o uso de uma tabela preditiva LL(k) para identificar os
símbolos terminais que iniciam cada regra de produção. É extremamente importante prever
o próximo símbolo lido da entrada para otimizar a execução da gramática.
Seja a seguinte gramática livre de contexto a seguir, onde ε representa o string vazio e $
representa um marcador de fim de entrada.

Dada a seguinte gramática, onde ε representa a sentença vazia:


S → AB | CD
A→a|ε
B→b|f
C→c|g
D→h|i

Qual o conjunto de terminais que podem começar sentenças derivadas de S ?


Escolha uma opção:

a. {a, c, g, h, i}

b. {a, b, f, c, g, h, i}

c. {a, c, g}

d. {a, b, f, c, g}

e. {a, b, f}

Sua resposta está correta.


A resposta correta é:{a, b, f, c, g}
Questão 6
Marcar questão
Correto Atingiu 0,35 de 0,35

Gramáticas genéricas livres de contexto podem ser implementadas usando algoritmos


também genéricos. No entanto, esses algoritmos apresentam, no pior dos casos, um
processamento cuja complexidade é O(n3), onde n é o número de símbolos da entrada.
Contudo, existem subconjuntos de gramáticas que podem ser processadas de modo mais
eficiente. Essas formas mais simples são ainda suficientemente genéricas em relação a
quase todas as linguagens concebidas para o processamento computacional, mas fazem
parte dos tipos de gramáticas livres de contexto que utilizam autômatos com pilha. (Louden,
2004).
Louden, Kenneth C. Compiladores: princípios e práticas. Disponível em: Minha Biblioteca,
Cengage Learning Brasil, 2004.

Seja a linguagem formal L = {anb2nc, n ≥ 0}. Analise as seguintes assertivas.


I. L é uma linguagem livre de contexto.
II. A gramática G = ({S, X}, {a, b, c}, {S→Xc, X→aXbb | ε}, S) gera a linguagem L.
III. L não pode ser reconhecida por um autômato com pilha.

Escolha uma opção:

a. Apenas as assertivas I e III.

b. Nenhuma das assertivas.

c. Todas as assertivas.

d. Apenas as assertivas II e III.

e. Apenas as assertivas I e II.

Sua resposta está correta.


A resposta correta é:Apenas as assertivas I e II.
Questão 7
Marcar questão
Correto Atingiu 0,35 de 0,35

A implementação clássica de um analisador léxico considera um autômato finito


determinista em que é codificado explicitamente as regras de transição do autômato, por
exemplo:
int lexico() {
while (1) {
switch (estado) {
case 0: c = next_char();
if(isalpha(c)) {
estado = 1;
next++;
} else {
error();
}
break;
...
}
}
Ou, codificando cada estado como uma função, sendo os saltos para os rótulos substituídos
por chamadas às rotinas que representam os respectivos estados. No entanto, esta solução
não é tão eficiente, pois as chamadas e retorno das rotinas são, em geral, operações lentas.
Além disso essa solução utiliza a pilha do processador para colecionar os estados por onde
vai passando (Santos e Langlois, 2018).
Santos, Pedro, R. e Thibault Langlois. Compiladores - Da Teoria à Prática. Disponível em: Minha
Biblioteca, Grupo GEN, 2018.

Um solução mais eficiente é incorporar bibliotecas que já implementam implicitamente o


autômato finito através das expressões regulares. Considerando as regras de formação de
expressões regulares e que o uso de uma biblioteca estilo REGEX, verifique o fragmento de
código abaixo e responda às questões:
public class LexerJ {
public static enum TokenType {
NUM("\\d+"),
ID("[A-Za-z]+"),
MISMATCH("[.]"),
SKIP("[ \t\f\r\n]+");
public final String pattern;
private TokenType(String pattern) {
this.pattern = pattern;
}
}
}

I. No programa acima, NUM, ID, MISMATCH e SKIP representam definições regulares que
reconhecem números inteiros, identificadores alfabéticos, símbolos indesejados e
símbolos a serem evitados na análise, respectivamente;
II. A definição regular NUM não reconhece números reais pois a definição MISMATCH
impede o uso do ponto;

Sobre as afirmações (I) e (II) acima, podemos deduzir que:

a. A declaração (I) é verdadeira e a declaração (II) é falsa;

b. A declaração II é verdadeira e é uma conclusão de (I);

c. A declaração (II) é falsa pois nega a declaração em (I);

d. A declaração (I) é falsa e não justifica a declaração (II);

e. Ambas as declarações são falsas.

Sua resposta está correta.


A resposta correta é: A declaração (I) é verdadeira e a declaração (II) é falsa;
Questão 8
Marcar questão
Correto Atingiu 0,55 de 0,55

O processamento da parte regular de uma linguagem denomina-se análise léxica. A análise


léxica é utilizada essencialmente na categorização dos elementos de uma linguagem em
classes de símbolos, em vez de caracteres individuais. Particularmente, permite separar
nomes em palavras reservadas, identificadores e literais, bem como classificar outros
símbolos como terminadores, separadores e operadores.
Santos, Pedro, R. e Thibault Langlois. Compiladores - Da Teoria à Prática. Disponível em: Minha
Biblioteca, Grupo GEN, 2018.
Considere um fragmento de código de um Analisador Léxico simplificado na linguagem JAVA:
public static enum TokenType {
NUM("\\d+(\\.\\d+)?"),
ID("[A-Za-z]+"),
MISMATCH("[.]"),
SKIP("[ \t\f\r\n]+");

public final String pattern;

private TokenType(String pattern) {


this.pattern = pattern;
}
}

Para modificar o fragmento de código fazendo com que o Analisador consiga reconhecer as
operações aritméticas de "+"(ADD), "-"(SUB), "*" (MUL), "/" (DIV) e comando de atribuição com
o símbolo "="(ATRIB), indique qual alternativa abaixo melhor represente esta modificação de
inclusão de linhas no código:

ADD("[+]"),
SUB("[-]"),
a. MUL("[*]"),
DIV("[/]"),
ATRIB("[=]"),

Não há necessidade de alteração no código para aceitar os símbolos


b.
adicionais.

c. "[+, -, *, /]" (ADD, SUB, MUL, DIV),

d. ADD, ADD, MUL, DIV, ATRIB


"[+]" (ADD),
"[-]" (SUB),
e. "[*]" (MUL),
"[/]" (DIV),
"[=]" (ATR),

Sua resposta está correta.


A resposta correta é: ADD("[+]"), SUB("[-]"), MUL("[*]"), DIV("[/]"),
ATRIB("[=]"),

Terminar revisão

Seguir para...

ftec.com.br 0800 603 0 603

Copyright © 2024 Ecoinove Holding Educacional. All right reserved.

Você também pode gostar