Ybadoo - Soluções em Software Livre
Tutoriais
Linguagens Formais e Autômatos

Converta para a Forma Normal de Chomsky a gramática:

Notação Algébrica:

G = ({S, A, B, C, D, E, F}, {a, b, c, d}, P, S)
P = {S → aAbB | cdC | E
     AA | Bc
     B → dA | cBdc
     C → abEDd | Eabc | acDb
     DDac | cDa | acd
     E → aBbAc | ε
     FCCc}

Notação de Backus-Naur (BNF):

G = ({S, A, B, C, D, E, F}, {a, b, c, d}, P, S)
P = {<S> ::= a<A>b<B> | cd<C> | <E>
     <A> ::= <A> | <B>c
     <B> ::= d<A> | c<B>dc
     <C> ::= ab<E><D>d | <E>abc | ac<D>b
     <D> ::= <D>ac | c<D>a | acd
     <E> ::= a<B>b<A>c | ε
     <F> ::= <C><C>c}

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

1.1. Exclusão de Produções Vazias

1.1.1. Identificação das variáveis que constituem produções vazias

Conjunto de variáveis que constituem produções vazias
Iteração Variáveis
0
1 {E}
2 {E, S}
3 {E, S}

1.1.2. Exclusão das produções vazias da gramática

G = ({S, A, B, C, D, E, F}, {a, b, c, d}, P, S)
P = {S → aAbB | cdC | E
     AA | Bc
     B → dA | cBdc
     C → abEDd | abDd | Eabc | abc | acDb
     DDac | cDa | acd
     E → aBbAc
     FCCc}

1.1.3. Inclusão da palavra vazia, caso pertença a linguagem gerada pela gramática

G = ({S, A, B, C, D, E, F}, {a, b, c, d}, P, S)
P = {S → aAbB | cdC | E | ε
     AA | Bc
     B → dA | cBdc
     C → abEDd | abDd | Eabc | abc | acDb
     DDac | cDa | acd
     E → aBbAc
     FCCc}

 

1.2. Exclusão de Produções da Forma AB

1.2.1. Construção dos fechos das variáveis

Fecho(S) = {E}
Fecho(A) = {A}
Fecho(B) = ∅
Fecho(C) = ∅
Fecho(D) = ∅
Fecho(E) = ∅
Fecho(F) = ∅

1.2.2. Exclusão das produções da forma AB

G = ({S, A, B, C, D, E, F}, {a, b, c, d}, P, S)
P = {S → aAbB | cdC | aBbAc | ε
     ABc
     B → dA | cBdc
     C → abEDd | abDd | Eabc | abc | acDb
     DDac | cDa | acd
     E → aBbAc
     FCCc}

 

1.3. Exclusão de Símbolos Inúteis

1.3.1. Identificação das variáveis que constituem terminais

Conjunto de variáveis que constituem terminais
Iteração Variáveis
0
1 {C, D}
2 {C, D, S, F}
3 {C, D, S, F}
G = ({S, C, D, F}, {a, b, c, d}, P, S)
P = {S → cdC | ε
     C → abDd | abc | acDb
     DDac | cDa | acd
     FCCc}

1.3.2. Identificação dos símbolos alcançáveis a partir do símbolo inicial

Conjunto de símbolos alcançáveis a partir do símbolo inicial
Iteração Variáveis Terminais
0 {S}
1 {S, C} {c, d}
2 {S, C, D} {c, d, a, b}
3 {S, C, D} {c, d, a, b}
G = ({S, C, D}, {a, b, c, d}, P, S)
P = {S → cdC | ε
     C → abDd | abc | acDb
     DDac | cDa | acd}

 

2. Conversão das produções contendo terminais para a forma A → a

G = ({S, C, D, W1, W2, W3, W4, W5, W6, X1, X2, X3, Y1, Y2, Y3, Y4, Y5, Y6, Z1, Z2, Z3}, {a, b, c, d}, P, S)
P = {SY1Z1C | ε
     CW1X1DZ2 | W2X2Y2 | W3Y3DX3
     DDW4Y4 | Y5DW5 | W6Y6Z3
     W1 → a
     W2 → a
     W3 → a
     W4 → a
     W5 → a
     W6 → a
     X1 → b
     X2 → b
     X3 → b
     Y1 → c
     Y2 → c
     Y3 → c
     Y4 → c
     Y5 → c
     Y6 → c
     Z1 → d
     Z2 → d
     Z3 → d}

 

3. Conversão das produções contendo variáveis para a forma ABC

G = ({S, S1, C, C1, C2, C3, C4, C5, D, D1, D2, D3, W1, W2, W3, W4, W5, W6, X1, X2, X3, Y1, Y2, Y3, Y4, Y5, Y6, Z1, Z2, Z3}, {a, b, c, d}, P, S)
P = {SY1S1 | ε
     S1Z1C
     CW1C2 | W2C3 | W3C5
     C1DZ2
     C2X1C1
     C3X2Y2
     C4DX3
     C5Y3C4
     DDD1 | Y5D2 | W6D3
     D1W4Y4
     D2DW5
     D3Y6Z3
     W1 → a
     W2 → a
     W3 → a
     W4 → a
     W5 → a
     W6 → a
     X1 → b
     X2 → b
     X3 → b
     Y1 → c
     Y2 → c
     Y3 → c
     Y4 → c
     Y5 → c
     Y6 → c
     Z1 → d
     Z2 → d
     Z3 → d}