Ybadoo - Soluções em Software Livre
Tutoriais
Compiladores

Elimine a recursividade à esquerda, considerando a palavra vazia, das produções da gramática a seguir.

G = ({S, A, B, C}, {a, b}, P, S)
P = {SSC | AA | a
ACA | AB | a
BAC | b
CCA | AS | b}

 

1. Simplificação da gramática livre de contexto:

G = ({S, A, B, C}, {a, b}, P, S)
P = {SSC | AA | a
ACA | AB | a
BAC | b
CCA | AS | b}

2. Renomeação das variáveis em uma ordem crescente qualquer:

G = ({A, B, C, D}, {a, b}, P, A)
P = {AAD | BB | a
BDB | BC | a
CBD | b
DDB | BA | b}

4. Exclusão das recursões da forma ArArα:

G = ({A, A₀, B, B₀, C, D, D₀}, {a, b}, P, A)
P = {ABBA₀ | aA₀
A₀DA₀ | ε
BDBB₀ | aB₀
B₀CB₀ | ε
CBD | b
DBAD₀ | bD₀
D₀BD₀ | ε}

3. Transformação das produções da forma ArAsα, onde rs:

G = ({A, A₀, B, B₀, C, D, D₀}, {a, b}, P, A)
P = {ABBA₀ | aA₀
A₀DA₀ | ε
BDBB₀ | aB₀
B₀CB₀ | ε
CDBB₀D | aB₀D | b
DDBB₀AD₀ | aB₀AD₀ | bD₀
D₀BD₀ | ε}

4. Exclusão das recursões da forma ArArα:

G = ({A, A₀, B, B₀, C, D, D₀, D₁}, {a, b}, P, A)
P = {ABBA₀ | aA₀
A₀DA₀ | ε
BDBB₀ | aB₀
B₀CB₀ | ε
CDBB₀D | aB₀D | b
D → aB₀AD₀D₁ | bD₀D₁
D₀BD₀ | ε
D₁BB₀AD₀D₁ | ε