Apresente a Análise Preditiva Tabular, com recuperação local de erros, da entrada (a (a; ); a) sobre a gramática a seguir.
G = ({S, L}, {a, ;, (, )}, P, S)
P = {S → (L) | a
L → L;S | S}
1. Eliminação da recursividade à esquerda:
1.1. Simplificação da gramática livre de contexto:
G = ({S, L}, {a, ;, (, )}, P, S)
P = {S → (L) | a
L → L;S | (L) | a}
1.2. Renomeação das variáveis em uma ordem crescente qualquer:
G = ({A, B}, {a, ;, (, )}, P, A)
P = {A → (B) | a
B → B;A | (B) | a}
1.3. Transformação das produções da forma Ar → Asα, onde r ≤ s:
G = ({A, B}, {a, ;, (, )}, P, A)
P = {A → (B) | a
B → B;A | (B) | a}
1.4. Exclusão das recursões da forma Ar → Arα:
G = ({A, B, C}, {a, ;, (, )}, P, A)
P = {A → (B) | a
B → (B)C | aC | (B) | a
C → ;AC | ;A}
2. Fatoração a esquerda da gramática livre de contexto:
G = ({A, B, C, D}, {a, ;, (, )}, P, A)
P = {A → (B) | a
B → (B)D | aD
C → ;AD
D → C | ε}
3. Conjuntos FIRST(α) e FOLLOW(A):
FIRST(A) = {a, (}
FIRST(B) = {a, (}
FIRST(C) = {;}
FIRST(D) = {;, ε}
FOLLOW(A) = {;, ), $}
FOLLOW(B) = {)}
FOLLOW(C) = {)}
FOLLOW(D) = {)}
4. Tabela de Análise Preditiva:
a | ; | ( | ) | $ | |
---|---|---|---|---|---|
A | A → a | erro 1 | A → (B) | erro 1 | erro 1 |
B | B → aD | erro 1 | B → (B)D | erro 1 | erro 1 |
C | C → ;AD | erro 1 | erro 1 | ||
D | D → ε | D → C | D → ε | D → ε | D → ε |
a | desempilha | ||||
; | desempilha | ||||
( | desempilha | ||||
) | erro 2 | erro 2 | erro 2 | desempilha | erro 2 |
$ | erro 3 | erro 3 | erro 3 | erro 3 | sucesso |
erro 1 - insere o token a na entrada e emite a mensagem: operando esperado.
erro 2 - retira o token ) da pilha e emite a mensagem: parêntese direito esperado.
erro 3 - retira o token da entrada e emite a mensagem: fim de arquivo encontrado.
5. Analisador Preditivo Tabular:
Pilha | Entrada | Derivação |
---|---|---|
$ A | (a (a; ); a)$ | A → (B) |
$ ) B ( | (a (a; ); a)$ | |
$ ) B | a (a; ); a)$ | B → aD |
$ ) D a | a (a; ); a)$ | |
$ ) D | (a; ); a)$ | D → ε |
$ ) | (a; ); a)$ | erro 2 |
$ | (a; ); a)$ | erro 3 |
$ | a; ); a)$ | erro 3 |
$ | ; ); a)$ | erro 3 |
$ | ); a)$ | erro 3 |
$ | ; a)$ | erro 3 |
$ | a)$ | erro 3 |
$ | )$ | erro 3 |
$ | $ | aceita |