Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Apresente a Análise Preditiva Tabular 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₁  
E₁ E₁ → vTE₁   E₁ → εE₁ → ε
TTFT₁  TFT₁TFT₁  
T₁ T₁ → εT₁ → &FT₁  T₁ → εT₁ → ε
FF → id  F → ~FF → (E)  

Analisador Preditivo Tabular:

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