Buscar

Compiladores - Lista de Exercícios 3 - Resolução

Prévia do material em texto

Lista de Exercícios 3: Compiladores 
Prof André Luiz Teixeira Vinci 
 
 
1. Elimine a recursividade à esquerda, quando existir, para cada as 
seguintes regras gramaticais: 
comando : comando ';' listaComandos 
comando : comando ';' 'if' '(' expr ')' 'then' comando 
expr : expr '+' termo | expr '-' termo | termo 
termo : termo '*' fator | termo '/' fator | fator 
fator : fator '.' VAR | VAR 
comando : 'while' '(' expr ')' comando 'endwhile' 
listacomandos : '{' comando '}' 
Resolução: 
comando : 'while' '(' expr ')' comando 'endwhile' comando2 
comando2 : ';' listaComandos comando2 | ';' 'if' '(' expr ')' 'then' 
comando | <<vazio>> 
expr : termo expr2 
expr2 : '+' termo expr2 | '-' termo expr2 | <<vazio>> 
termo : fator termo2 
termo2 : '*' fator termo2 | '/' fator termo2 | <<vazio>> 
fator : VAR fator2 
fator2: '.' VAR fator2 | <<vazio>> 
listacomandos : '{' comando '}' 
 
2. Realize a fatoração à esquerda, se necessário, para o seguinte conjunto 
de regras gramaticais abaixo: 
comandoCondicao : 
'SE' expressaoRelacional 'ENTAO' comando 'FIMSE' | 
'SE' expressaoRelacional 'ENTAO' comando 'SENAO' comando 'FIMSE'; 
Resolução: 
comandoCondicao : 'SE' expressaoRelacional 'ENTAO' comando 
comandoSenao 'FIMSE' 
comandoSenao : 'SENAO' comando | <<vazio>> 
 
3. Remova a recursividade à esquerda modificando as regras gramaticais 
abaixo de forma a empregar EBNF. 
lexp : atomo | lista 
atomo : numero | identificador 
lista : '(' lexpseq ')' 
lexpseq : lexpseq lexp | lexp 
Resolução: 
lexp : atomo | lista 
atomo : numero | identificador 
lista : '(' lexp+ ')' 
 
4. Considere a seguinte gramática e elimine a recursividade à esquerda. 
S : ( L ) | a 
L : L,S | S 
Resolução: 
S : '(' L ')' | 'a' 
L : S L2 
L2 : ',' S L2 | <<vazio>> 
 
5. Considere a gramática do Exercício 3 e responda: 
a. A gramática é LL(1)? 
b. Se não, aplique as transformações necessárias para convertê-la 
em LL(1). 
Resolução: 
Não é LL(1), pois, há recursividade à esquerda. Removendo: 
lexp : atomo | lista 
atomo : numero | identificador 
lista : ( lexpseq ) 
lexpseq : lexp lexpseq2 
lexpseq2 : lexp lexpseq2 | ε 
 
6. Considerando a gramática é possível afirmar que ela é LL(K)? Justifique 
sua resposta. 
declaracao : nomeQualificado ‘:’ ID ‘;’ 
| nomeQualificado ‘:’ ID ‘=’ expressao; 
nomeQualificado : ID | ID ‘.’ nomeQualificado; 
Resolução: Não, pois não há nenhum valor mínimo de k tal que garantidamente seja 
possível determinar qual das duas produções da regra “declaração” utilizar. Isso porque 
a regra nomeQualificado tem recursividade, e portanto pode gerar nomes 
infinitamente grandes. 
 
7. Apresente as ações do analisador preditivo não recursivo correspondente 
para cada uma das cadeias de entrada abaixo. Utilize a tabela LL(1) 
fornecida e considere x, y e z como identificador e 2 como número. 
a. (x (y (2)) (z)) 
b. (x y 2)) (z)) 
c. (x y 2 
 numero identificador ( ) $ 
 
lexp lexp → atomo lexp → atomo lexp → lista 
 
atomo atomo → numero atomo → 
 identificador 
 
lista lista → ( 
 lexpseq ) 
 
lexpseq lexpseq → lexp lexpseq → lexp lexpseq → lexp 
 lexpseq2 lexpseq2 lexpseq2 
 
lexpseq2 lexpseq2 → lexp lexpseq2 → lexp lexpseq2 → lexp 
lexpseq2 
→ ε 
 lexpseq2 lexpseq2 lexpseq2 
 
 
Resolução: 
a. (x (y (2)) (z)) 
 
b. (x y 2)) (z)) 
 
 
c. (x y 2 
 
 
8. Realize a análise sintática LR para cada cadeia abaixo, apresentando 
uma tabela para cada passo dos valores da pilha, símbolos, cadeia e 
ação. Considere a gramática e tabela SLR fornecidas na sequência. 
a. ((id)) 
b. (id * id (id)) 
c. (id * ) id) 
d. id + id + id 
Gramática Enumerada Tabela SLR 
(1) E → E + T 
(2) E → T 
(3) T → T * F 
(4) T → F 
(5) F → (E) 
(6) F → id 
 
 
 
 
 
 
 
Estados Ações Transições 
id + * ( ) $ E T F 
0 s5 
 
s4 
 
1 2 3 
1 
 
s6 
 
OK 
 
2 
 
r2 s7 
 
r2 r2 
 
3 
 
r4 r4 
 
r4 r4 
 
4 s5 
 
s4 
 
8 2 3 
5 
 
r6 r6 
 
r6 r6 
 
6 s5 
 
s4 
 
9 3 
7 s5 
 
s4 
 
10 
8 
 
s6 
 
s11 
 
9 
 
r1 s7 
 
r1 r1 
 
10 
 
r3 r3 
 
r3 r3 
 
11 
 
r5 r5 
 
r5 r5 
 
Resolução: 
a. ((id)) 
 
b. (id * id (id)) 
 
c. (id * ) id) 
 
 
 
 
d. id + id + id

Continue navegando