Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise Preditiva Tabular, com recuperação de erros em modo pânico, da entrada (id ~id) v id sobre a gramática a seguir.

G = ({E, T, F}, {id, &, v, ~, (, )}, P, E)
P = {EEvT | T
TT&F | F
F → (E) | ~F | id}

 

Eliminação de Recursividade à Esquerda:

G = ({E, E₁, T, T₁, F}, {id, &, v, ~, (, )}, P, E)
P = {ETE₁
E₁ → vTE₁ | ε
TFT₁
T₁ → &FT₁ | ε
F → (E) | ~F | id}

Fatoração à Esquerda:

G = ({E, E₁, T, T₁, F}, {id, &, v, ~, (, )}, P, E)
P = {ETE₁
E₁ → vTE₁ | ε
TFT₁
T₁ → &FT₁ | ε
F → (E) | ~F | id}

Conjuntos FIRST(α) e FOLLOW(A):

FIRST(E)  = {id, ~, (}
FIRST(E₁) = {v, ε}
FIRST(T)  = {id, ~, (}
FIRST(T₁) = {&, ε}
FIRST(F)  = {id, ~, (}
FOLLOW(E)  = {), $}
FOLLOW(E₁) = {), $}
FOLLOW(T)  = {v, ), $}
FOLLOW(T₁) = {v, ), $}
FOLLOW(F)  = {&, v, ), $}

Tabela de Análise Preditiva:

Tabela de análise preditiva da gramática G
 idv&~()$
EETE₁  ETE₁ETE₁sincsinc
E₁ E₁ → vTE₁   E₁ → εE₁ → ε
TTFT₁sinc TFT₁TFT₁sincsinc
T₁ T₁ → εT₁ → &FT₁  T₁ → εT₁ → ε
FF → idsincsincF → ~FF → (E)sincsinc

Analisador Preditivo Tabular:

Movimentos do analisador preditivo tabular para (id ~id) v id
PilhaEntradaDerivação
$ E(id ~id) v id $ETE₁
$ E₁ T(id ~id) v id $TFT₁
$ E₁ T₁ F(id ~id) v id $F → (E)
$ E₁ T₁ ) E ((id ~id) v id $ 
$ E₁ T₁ ) Eid ~id) v id $ETE₁
$ E₁ T₁ ) E₁ Tid ~id) v id $TFT₁
$ E₁ T₁ ) E₁ T₁ Fid ~id) v id $F → id
$ E₁ T₁ ) E₁ T₁ idid ~id) v id $ 
$ E₁ T₁ ) E₁ T₁~id) v id $erro
$ E₁ T₁ ) E₁ T₁id) v id $erro
$ E₁ T₁ ) E₁ T₁) v id $T₁ → ε
$ E₁ T₁ ) E₁) v id $E₁ → ε
$ E₁ T₁ )) v id $ 
$ E₁ T₁v id $T₁ → ε
$ E₁v id $E₁ → vTE₁
$ E₁ T vv id $ 
$ E₁ Tid $TFT₁
$ E₁ T₁ Fid $F → id
$ E₁ T₁ idid $ 
$ E₁ T₁$T₁ → ε
$ E₁$E₁ → ε
$$aceita