Você está na página 1de 2

ED3Q

Em geral, a recursividade direta esquerda pode ser eliminada como segue:


Sejam as produes do tipo:
A ::= A1 | A2 | . . . | Am | 1 | 2 | . . . |n ,
com cabea(i) A p/ i = 1, 2, . . . n

Ento:
A ::= 1 A| 2 A| . . . |n A
A ::= 1 A| 2 A| . . . |m A|
OBS: o processo elimina toda recursividade direta esquerda (desde que os is ),
mas, no elimina toda recursividade esquerda.

Seja a seguinte gramtica G(S)


S ::= Aa |b
A ::= Ac |Sd |e
G(S) recursiva esquerda em S
S Aa Sda
(S + Sda)

Soluo: Usar um algoritmo geral de eliminao de recursividade esquerda.


Algoritmo: Elimina a recursividade esquerda de gramticas sem ciclos (derivaes
da forma A + A) e sem -produes (produes da forma A )
1. Organize os smbolos no_terminais da gramtica em uma certa ordem
2. A1, A2, . . . ,An
3. para i := 1 at n faa
para j := 1 at i 1 faa
substitua cada produo da forma
Ai ::= Aj pelas produes Ai ::= 1 |2 | . . . |k,
onde Aj ::= 1 |2 | . . . |k;
elimine a recursividade direta esquerda das Ais produes

Exemplo: Eliminar a recursividade esquerda da seguinte Gramtica G(S)

S ::= Aa |b
A ::= Ac |Sd |e

A1 ::= A2a |b
A2 ::= A2c |A1d |e

S (A1) no tem recursividade direta esquerda


A2 ::= A1d A2 ::= A2ad |bd
I

1 2

Eliminando a recursividade direta de A2 temos:

A1 ::= A2a |b
A2 ::= bdA2 |eA2
A2::= cA2 | adA2 |

S ::= Aa |b

A ::= bdA |eA


A ::= cA |adA |

Você também pode gostar