Buscar

Árvore de Derivação Simplificação Ambigüidade e Formas Normais

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 55 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 55 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 55 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-1
Gramática Livre de 
Contexto
Prof. Yandre Maldonado e Gomes da Costa
yandre@din.uem.br
•Árvore de derivação
•Ambigüidade
•Simplificação de Gramática
•Forma Normal de Chomsky (FNC)
•Forma Normal de Greibach (FNG)
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-2
Árvore de Derivação
� Uma maneira de representar a derivação 
de uma sentença a partir de uma GLC;
� Particularmente útil em algumas aplicações, 
como compiladores;
� Em uma árvore de derivação:
� A raiz é o símbolo de partida da GLC;
� Os nós internos são símbolos de V;
� Os nós folha são símbolos de T (ou λ);
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-3
Árvore de Derivação
� Exemplo: árvore de derivação para a 
sentença “x+x*x” a partir da seguinte 
GLC;
1) E → E+E
2) E → E*E
3) E → (E)
4) E → x
E
E E
E E
+
*x
x x
E ⇒ E+E ⇒ x+E ⇒ x+E*E ⇒ x+x*E ⇒ x+x*x1 4 2 4 4
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-4
Ambigüidade
� Uma sentença é dita ambígua, 
quando existir pelo menos dois 
“caminhos de derivação” para ela;
� Assim, existe mais do que uma árvore 
de derivação associada a uma 
sentença ambígua;
� Uma gramática é dita ambígua, se ela 
produzir pelo menos uma sentença de 
forma ambígua;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-5
Ambigüidade
� Exemplo: dois caminhos para “x+x*x”
1) E → E+E
2) E → E*E
3) E → (E)
4) E → x
E
E E
E E
+
*x
x x
E ⇒ E+E ⇒ x+E ⇒ x+E*E ⇒ x+x*E ⇒ x+x*x1 4 2 4 4
E
E E
E E
*
+ x
x x
E ⇒ E*E ⇒ E+E*E ⇒ x+E*E ⇒ x+x*E ⇒ x+x*x2 1 4 4 4
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-6
Simplificação de GLC
� É possível simplificar algumas 
produções de uma GLC sem reduzir o 
seu poder de geração;
� Tipos de simplificação:
� Exclusão de símbolos inúteis;
� Exclusão de produções vazias;
� Exclusão de produções da forma A→B;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-7
Simplificação de GLC
� Exclusão de símbolos inúteis:
� Variáveis (não-terminais) ou terminais 
que não contribuem com a produção 
de sentenças;
� Etapas:
• Exclusão de símbolos improdutivos;
• Exclusão de símbolos inacessíveis;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-8
Simplificação de GLC
� Exclusão de símbolos inúteis:
� É importante por vários motivos
• Em gramáticas grandes, como 
gramáticas de linguagens de 
programação, pode acontecer de se 
esquecer de definir regras relativas a 
alguma variável, ou então, uma variável, 
apesar de ter suas regras já definidas, 
pode não ter sido utilizada na formação 
de novas regras.
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-9
Simplificação de GLC
1) S → AB | a
2) B → b
3) C → c
EXEMPLO: Seja a Gramática
({S, A, B, C}, {a, b, c}, P,S} onde P contém as regras:
1) S → a
C é inútil (não é acessível)
A é inútil (não está definido) 
B é inútil (não usado em palavras da linguagem)
Eliminando-se as variáveis inúteis e as regras 
que as referenciam, além dos terminais b e c 
que não ocorrem em nenhuma regra (não são 
usados para formar palavras da linguagem 
gerada) tem-se esta regra
A Gramática equivalente é dada por
({S}, {a}, S → a, S}
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-10
Simplificação de GLC
� Etapa 1: garante que qualquer não terminal 
gera terminais;
� Algoritmo: parte de G(V,T,P,S) e dá origem 
a G1(V1,T,P1,S);
� Construção de V1:
� Conjunto P1: P menos as produções cujos 
não terminais não pertencem a V1;
V1 = ∅
repita V1 = V1∪ {A | A → α e α ϵ (T ∪ V1 )*}
até que o cardinal de V1 não aumente;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-11
Simplificação de GLC
� Exemplo:
1) S → aAa
2) S → bBb
3) A → a
4) A → S
5) C → c
6) B → bB
V1 = ∅
repita
V1 = V1∪ {A | A → α e α ϵ (T ∪ V1 )*}
até que o cardinal de V1 não aumente;
{A, C, S}3
{A, C, S}2
{A, C}1
∅início
V1iteração
1) S → aAa
2) A → a
3) A → S
4) C → c
Qqr não 
terminal 
gera 
terminal
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-12
Simplificação de GLC
� Etapa 2: garante que qualquer símbolo é
atingível a partir do símbolo inicial;
� Algoritmo: parte de G1(V1,T1,P1,S) e dá
origem a G2(V2,T2,P2,S);
� Conjunto P2: P1 menos as produções cujos 
símbolos não pertencem a V2 ou T2;
T2 = ∅; V2 = {S};
repita V2 = V2∪ {A | X → αAβ ϵ P1 , X ϵ V2};
T2 = T2∪ {a | X → αaβ ϵ P1 , X ϵ V2};
até que os cardinais de V2 e T2 não aumentem;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-13
Simplificação de GLC
� Exemplo:
1) S → aAa
2) A → a
3) A → S
4) C → c
T2 = ∅; V2 = {S};
repita V2 = V2∪ {A | X → αAβ ϵ P1 , X ϵ V2};
T2 = T2∪ {a | X → αaβ ϵ P1 , X ϵ V2};
até que os cardinais de V2 e T2 não aumentem;
{a}{S, A}2
{a}{S, A}1
∅{S}início
terminaisvariáveisiteração
1) S → aAa
2) A → a
3) A → S
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-14
Simplificação de GLC
� Exclusão de produções vazias:
� Produções vazias são produções da 
forma A → λ;
� Etapas:
• Variáveis que constituem produções 
vazias;
• Exclusão das produções vazias;
• Inclusão da geração da palavra vazia, se 
necessário;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-15
Simplificação de GLC
� Etapa 1: conjunto de variáveis que 
constituem produções vazias;
� Considera inicialmente todas as variáveis 
que geram diretamente λ;
� A seguir, sucessivamente são determinadas 
as variáveis que indiretamente geram λ;
� Algoritmo:
Vλ = { A | A → λ };
repita
Vλ = Vλ∪ { X | X→X1…Xn ϵ P | X1, …, Xn ϵ Vλ }
até que o cardinal de Vλ não aumente;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-16
Simplificação de GLC
� Exemplo:
1) S → aXa
2) S → bXb
3) S → λ
4) X → a
5) X → b
6) X → Y
7) Y → λ
{S, Y, X}2
{S, Y, X}1
{S, Y}início
Vλiteração
Vλ = { A | A → λ };
repita
Vλ = Vλ∪ { X | X→X1…Xn ϵ P | X1, …, Xn ϵ Vλ }
até que o cardinal de Vλ não aumente;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-17
Simplificação de GLC
� Etapa 2: conjunto de produções sem 
produções vazias;
� Algoritmo: parte de G(V,T,P,S) e dá origem 
a G1(V,T,P1,S);
P1 = {A → α | α ≠ λ};
repita
para toda
A → α ϵ P1 e X ϵ Vλ | α = α1Xα2 e α1α2 ≠ λ
faca
P1 = P1 ∪ { A → α1 α2 }
até que o cardinal de P1 não aumente;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-18
Simplificação de GLC
� Exemplo:
1) S → aXa
2) S → bXb
3) S → λ
4) X → a
5) X → b
6) X → Y
7) Y → λ
{S → aXa | bXb | aa | bb, X → a | b | Y}2
{S → aXa | bXb | aa | bb, X → a | b | Y}1
{S → aXa | bXb, X → a | b | Y}inicial
produçõesiteração
Resultado da etapa 1: Vλ = {S, Y, X}
P1 = {A → α | α ≠ λ};
repita
para toda
A → α ϵ P1 e X ϵ Vλ | α = α1Xα2 e α1α2 ≠ λ
faca
P1 = P1 ∪ { A → α1 α2 }
até que o cardinal de P1 não aumente;
1) S → aXa
2) S → bXb
3) S → aa
4) S → bb
5) X → a
6) X → b
7) X → Y
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-19
Simplificação de GLC
� Etapa 3: quando a palavra vazia pertencer 
à linguagem gerada pela gramática, uma 
regra do tipo S → λ deve ser incluída em P;
Etapa 1:
1) S → aXa
2) S → bXb
3) S → λ
4) X → a
5) X → b
6) X → Y
7) Y → λ
Resultado: Vλλλλ = {S, Y, X}
Etapa 2:
1) S → aXa
2) S → bXb
3) S → aa
4) S → bb
5) X → a
6) X → b
7) X → Y
Etapa 3:
1) S → aXa
2) S → bXb
3) S → aa
4) S → bb
5) S → λ
6) X → a
7) X → b
8) X → Y
Note que Y se tornou inútil
P
rof
.
 Ya
nd
re
 M
ald
o
n
ad
o
 
-20
Simplificação de GLC
� Exemplo:
1) P → APB | C
2) A → AaaA | λ
3) B → BBb | C
4) C → cC | λ
1) P → APB | AB | AP | PB | A | B | C | λ
2) A → AaaA | aaA | Aaa | aa
3) B → BBb | Bb | b | C
4) C → cC | c
{A, C, P, B}1
{A, C}início
Vλiteração
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-21
Simplificação de GLC
� Exemplo:
1) P → BPA | A
2) A → aA | λ
3) B → Bba | λ
1) P → BPA | PA | BP | BA | B | A | λ
2) A → aA | a 
3) B → Bba | ba
{A, B, P}1
{A, B}início
Vλiteração
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-22
Simplificação de GLC
� Exclusão de produções da forma A → B:
� Produções da forma A → B não 
adicionam informação sintática alguma;
� Etapas:
• Construção do fecho de cada variável;
• Exclusão das produções da forma A → B;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-23
Simplificação de GLC
� Etapa 1: construção do fecho de cada 
variável;
� Algoritmo:
para toda A ϵ V 
faça FECHO-A = { B | A≠B e A ⇒*B} usando
exclusivamente produções da forma X → Y;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-24
Simplificação de GLC
� Exemplo:
1) S → aXa
2) S → bXb
3) X → a
4) X → b
5) X → S
6) X → λ {S}Fecho-X
∅Fecho-S
para toda A ϵ V 
faça FECHO-A = { B | A≠B e A ⇒*B} usando
exclusivamente produções da forma X → Y;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-25
Simplificação de GLC
� Etapa 2: exclusão das produções da forma 
A → B;
� Algoritmo: parte de G(V,T,P,S) e dá origem 
a G1(V,T,P1,S);
P1 = { A → α | α ∉ V };
para toda A ϵ V e B ϵ FECHO-A
faça se B → α ϵ P e α ∉ V
então P1 = P1 ∪ {A → α};
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-26
Simplificação de GLC
� Exemplo:
1) S → aXa
2) S → bXb
3) X → a
4) X → b
5) X → S
6) X → λ
{S → aXa | bXb, X → a | b | λ | aXa | bXb}X
{S → aXa | bXb, X → a | b | λ}S
{S → aXa | bXb, X → a | b | λ}Inicial
produçõesiteração
Etapa 1: Fecho-S=∅ e Fecho-X={S}
P1 = { A → α | α ∉ V };
para toda A ϵ V e B ϵ FECHO-A
faça se B → α ϵ P e α ∉ V
então P1 = P1 ∪ {A → α};
1) S → aXa
2) S → bXb
3) X → a
4) X → b
6) X → λ
7) X → aXa
8) X → bXb
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-27
Simplificação de GLC
� Simplificações combinadas:
� A eliminação de produções vazias pode 
gerar símbolos inúteis;
� A eliminação de produções unitárias (X → Y) 
também pode gerar símbolos inúteis;
� Por isso, em simplificações combinadas 
recomenda-se a seguinte seqüência:
• Exclusão de Produções Vazias;
• Exclusão de Produções Unitárias;
• Exclusão de Símbolos Inúteis;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-28
Formas Normais
� As formas normais estabelecem 
restrições rígidas a formação das 
regras em uma GLC sem diminuir o 
poder de representação deste tipo de 
gramática;
� Muito utilizadas em algoritmos de 
reconhecimento, transformações e 
prova de teoremas;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-29
Formas Normais
� As mais conhecidas são:
� Forma Normal de Chomsky (FNC);
� Forma Normal de Greibach (FNG);
� Na FNC, as regras devem ser da 
forma:
A → BC ou A → a
� Na FNG, as regras devem ser da 
forma:
A → aα
Sendo A, B e C ∈ V, a ∈ T e α ∈ V*
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-30
Forma Normal de Chomsky
� As regras devem ser da forma:
A → BC ou A → a
� O algoritmo é dividido em três etapas:
� Simplificação da gramática: exclusão de 
produções vazias e de produções unitárias, 
opcionalmente pode-se excluir símbolos 
inúteis;
� Transformação do lado direito de regras que 
tenham um comprimento maior ou igual a 2;
� Transformação do lado direito de regras que 
tenham um comprimento maior ou igual a 2 
em produções com exatamente 2 variáveis;
Chomsky, 1928
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-31
Forma Normal de Chomsky
� Etapa 1: simplificação da gramática;
� Excluir produções vazias;
� Excluir produções unitárias;
� Excluir símbolos inúteis (opcional);
� Exemplo:
1) E → E+E
2) E → E*E
3) E → (E)
4) E → x
A gramática já está simplificada.
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-32
Forma Normal de Chomsky
� Etapa 2: 
transformação do lado 
direito de regras com 
tamanho maior ou 
igual a 2;
� Faz com que esses 
lados direitos 
apresentem apenas 
não terminais;
� Algoritmo: parte de 
G1(V1,T,P1,S) e dá
origem a 
G2(V2,T,P2,S);
V2 = V1;
P2 = P1;
Para toda A → X1X2..Xn ϵ P2 tal que n >= 2
faça se para r ϵ {1, .., n}, Xr é terminal 
então (suponha Xr = a )
V2 = V2∪ {Ca};
susbstitui a por Ca em 
A → X1X2… Xn ϵ P2;
P2 = P2∪ {Ca→ a};
1) E → E+E
2) E → E*E
3) E → (E)
4) E → x
1) E → EC+E
2) E → EC
*
E
3) E → C(EC)
4) E → x
5) C+ → +
6) C
*
→ *
7) C( → (
8) C) → )
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-33
Forma Normal de Chomsky
� Etapa 3: transformação 
do lado direito das 
produções com tamanho 
maior ou igual a 3 em 
produções com 
exatamente 2 variáveis;
� Faz com que esses 
lados direitos 
apresentem exatamente 
2 variáveis;
� Algoritmo: parte de 
G2(V2,T,P2,S) e dá
origem a G3(V3,T,P3,S);
1) E → EC+E
2) E → EC
*
E
3) E → C(EC)
4) E → x
5) C+ → +
6) C
*
→ *
7) C( → (
8) C) → )
V3 = V2;
P3 = P2;
Para toda A → B1B2..Bn ϵ P3 tal que n >= 3
faça P3 = P3 – {A → B1B2 .. Bn};
V3 = V3∪ {D1, …, Dn-2};
P3 = P3∪ {A → B1D1, D1→ B2D2,…, 
Dn-3→ Bn-2Dn-2, Dn-2→
Bn-1Dn-1};
1) E → ED1
2) E → ED2
3) E → C(D3
4) E → x
5) C+ → +
6) C
*
→ *
7) C( → (
8) C) → )
9) D1 → C+E
10) D2 → C*E
11) D3 → EC)
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-34
Forma Normal de Chomsky
� Exemplo:
� Seja uma GLC G = ({L,S,E},{a, (,)}, P, L), 
onde P consta das regras:
1) L → (S)
2) S → SE | λ
3) E → a | L
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-35
Forma Normal de Chomsky
� Exemplo:
1) L → (S)
2) S → SE | λ
3) E → a | L
Observando-se que S é a única variável anulável, tem-se as 
seguintes regras após a eliminação de regra λ
1) L → (S) | ( )
2) S → SE | E
3) E → a | L
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-36
Forma Normal de Chomsky
� Exemplo:
1) L → (S) | ( )
2) S → SE | E
3) E → a | L
Obtem-se as seguintes regras após a eliminação de regras 
unitárias:
1) L → (S) | ( )
2) S → SE | a | (S) | ( )
3) E → a | (S) | ( )
Observando-se os 
fechos
Fecho(L)={}
Fecho(S)={E,L}
Fecho(E)={L}
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-37
Forma Normal de Chomsky
�Exemplo:
1) L → (S) | ( )
2) S → SE | a | (S) | ( )
3) E → a | (S) | ( )
1) L → C(SC) | C(C)
2) S → SE | a | C(SC) | C(C)
3) E → a | C(SC) | C(C)
4) C(→ (
5) C)→ )
Substituindo os terminais 
por variáveis nas regras cujo 
lado direito é maior ou igual 
a 2:
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-38
“Quebrando” as regras 
com lado direito maior 
que 2, obtem-se:
Forma Normal de Chomsky
�Exemplo:
1) L → C(SC) | C(C)
2) S → SE | a | C(SC) | C(C)
3) E → a | C(SC) | C(C)
4) C(→ (
5) C)→ )
1) L → C(D1 | C(C)
2) S → SE | a | C(D1 | C(C)
3) E → a | C(D1 | C(C)
4) C(→ (
5) C)→ )
6) D1 → SC)
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-39
Forma Normal de Chomsky
� Exercício:
� Coloque a seguinte gramática na FNC:
G=(V, T, P, S), onde:
V={S, A, B, C}
T={a, b, c}
P={ S → ASCA
S → ABCA
A → a
B → bBb
B → λ
C → c }
P
rof
.Y
a
nd
re
 M
ald
o
n
ad
o
 
-40
Forma Normal de Greibach
� Uma GLC G = (V, T, P, S) é dita estar 
na Forma Normal de Greibach (FNG) 
se todas as suas regras são da forma:
� A → aα
Sendo A ∈ V, a ∈ T e α ∈ (V∪T)*
� Greibach???
Sheila Greibach, 1939
A maioria dos autores definem α ∈ V*, 
o fato é que a transformação daquela 
forma para esta, mais restritiva, é
trivial.
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-41
Forma Normal de Greibach
� Depois de simplificada, a transformação de 
uma GLC para FNG envolve as etapas que 
serão descritas na seqüência:
� Etapa 1: renomeação das variáveis para 
uma ordem crescente qualquer;
• As variáveis da gramática são renomeadas em 
uma ordem crescente qualquer;
• Exemplo: A1, A2, … An onde n é um cardinal de 
V;
• Diferentes critérios de renomeação podem 
resultar em diferentes gramáticas na FNG;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-42
Forma Normal de Greibach
� Nesta etapa, a partir de uma gramática 
G1=(V1, T1, P1, S), obtêm-se a gramática G2
conforme descrito a seguir:
Gramática resultante: G2 = (V2, T1, P2, S)
Suponha que o cardinal de V1 é n
Construção de V2 e P2
V2 = { A1, A2, …, An } é V1 renomeando os elementos em uma
ordem qualquer
Inicialmente, P2 é P1 renomeando as variáveis na produção
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-43
Forma Normal de Greibach
� Exemplo:
1) S → AA
2) S → a
3) A → b
4) A → SS
Renomeando as 
variáveis S e A 
para A1 e A2
respectivamente
1) A1→ A2A2
2) A1→ a
3) A2→ b
4) A2→ A1A1
* Note que a gramática já está simplificada.
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-44
Forma Normal de Greibach
� Etapa 2: transformação das produções para 
a forma Ar→ Asα onde r ≤ s;
• Produções são modificadas garantindo que a 
primeira variável do lado direito é maior ou igual 
que a do lado esquerdo;
• Ar→ Asα onde r > s são modificadas;
• Substitui a variável As pelas suas respectivas 
produções;
• O conjunto de variáveis é finito: existe um limite 
para as produções crescentes;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-45
Forma Normal de Greibach
� Exemplo:
1) A1→ A2A2
2) A1→ a
3) A2→ b
4) A2→ A1A1
Substituindo A1
no lado direito 
da regra
1) A1→ A2A2
2) A1→ a
3) A2→ b
4) A2→ aA1
5) A2→ A2A2A1
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-46
Forma Normal de Greibach
� Etapa 3: exclusão das recursões da 
forma Ar→Arα;
• Podem existir originalmente na gramática 
ou serem geradas pela etapa anterior;
• Eliminação da recursão à esquerda: 
introduzindo variáveis auxiliares e 
incluindo recursão à direita (Br→αBr);
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-47
Forma Normal de Greibach
� Exemplo:
1) A1→ A2A2
2) A1→ a
3) A2→ b
4) A2→ aA1
5) A2→ A2A2A1
Introduzindo uma 
variável B2 e incluindo 
recursão a direita
1) A1→ A2A2
2) A1→ a
3) A2→ b
4) A2→ aA1
5) A2→ bB2
6) A2→ aA1B2
8) B2→ A2A1
9) B2→ A2A1B2
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-48
Forma Normal de Greibach
� Etapa 4: garante que o lado direito das 
produções iniciem com um terminal;
• Todas as produções da forma Ar→Asα onde r<s;
• Consequentemente, as produções da maior 
variável An só podem iniciar por terminais no lado 
direito;
• Assim, se em An-1→Anα for substituído An pelas 
suas correspondentes produções (ex: An→aβ), o 
lado direito das produções de An-1 também iniciará
por terminal (ex: An-1→aβα);
• A repetição do algoritmo para An-2, …, A1 resultará
em produções exclusivamente da forma Ar→aα;
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-49
Forma Normal de Greibach
� Exemplo:
1) A1→ A2A2
2) A1→ a
3) A2→ b
4) A2→ aA1
5) A2→ bB2
6) A2→ aA1B2
8) B2→ A2A1
9) B2→ A2A1B2
A1→ bA2
A1→ aA1A2
A1→ bB2A2
A1→ aA1B2A2
A1→ a
A2→ b
A2→ aA1
A2→ bB2
A2→ aA1B2
B2→ bA1
B2→ aA1A1
B2→ bB2A1
B2→ aA1B2A1
B2→ bA1B2
B2→ aA1A1B2
B2→ bB2A1B2
B2→ aA1B2A1B2
1)
2)
3)
4)
5)
6)
7)
8)
9)
10)
11)
12)
13)
14)
15)
16)
17)
Substituindo as 
variáveis no 
início dos lados 
direitos
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-50
Forma Normal de Greibach
� Algoritmo das etapas 2 e 3:
Gramática resultante G3 = (V3, T1, P3, S)
Suponha que o cardinal de V2 é n
P3 = P2
para r variando de 1 até n
faça
para s variando de 1 até r-1
faça para toda Ar→ Asα ∈ P3
faça excluir Ar→ Asα de P3;
para toda As→β ∈ P3
faça P3 = P3 ∪ { Ar→βα}
para toda Ar→ Arα ∈ P3
faça excluir Ar→ Arα de P3;
V3 = V3 ∪ {Br}
P3 = P3 ∪ {Br→ α}∪ {Br→ αBr}
para toda Ar→Φ∈ P3 tqΦ não inicia por Ar e 
alguma Ar→ Arα foi excluída
faça P3 = P3 ∪ { Ar→ΦBr};
Garante variável 
da esquerda 
menor ou igual a 
da direita
Elimina recursão 
a esquerda
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-51
Forma Normal de Greibach
� Algoritmo da etapa 4:
Gramática resultante G4 = (V3, T1, P4, S)
Construção de P4
P4 = P3;
para r variando de n-1 até 1 e toda Ar→ Asα ∈ P4
faça excluir Ar→ Asα de P4 ;
para toda As→ β de P4
faça P4 = P4 ∪ {Ar→ βα};
para toda Br→ Asβr
faça excluir Br→ Asβr de P4
para toda As→ aα
faça P4 = P4 ∪ { Br→ aαβr};
Também é necessário garantir
que as produções relativas às
variáveis auxiliares Br iniciam
por um terminal do lado direito.
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-52
Forma Normal de Greibach
� Exercício: transforme a seguinte GLC 
para FNG;
S → AB | SCB | SB | bB | b
A → aA | a | cC | c
B → bB | b
C → cC | c
A1→ A2 A3 | A1A4A3 | A1A3 | bA3 | b
A2→ aA2 | a | cA4 | c
A3→ bA3 | b
A4→ cA4 | c
Renomeando as 
variáveis (Etapa 1)
A produções já estão 
na forma Ar→ Asα
onde r ≤ s (Etapa 2)
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-53
Forma Normal de Greibach
� Exercício (continuação):
A1→ A2A3 | bA3 | b | A2A3B1 | bA3B1 | bB1
A2→ aA2 | a | cA4 | c
A3→ bA3 | b
A4→ cA4 | c
B1→ A4A3 | A3 | A4A3B1 | A3B1
A1→ A2 A3 | A1A4A3 | A1A3 | bA3 | b
A2→ aA2 | a | cA4 | c
A3→ bA3 | b
A4→ cA4 | c Eliminando recursão a 
esquerda: Ar→ Arα(Etapa 3)
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-54
Forma Normal de Greibach
� Exercício (continuação):
A1→ aA2A3 | aA3 | cA4A3 | cA3 | bA3 | b | aA2A3B1 | aA3B1 | cA4A3B1 | cA3B1 | 
bA3B1 | bB1
A2→ aA2 | a | cA4 | c
A3→ bA3 | b
A4→ cA4 | c
B1→ cA4 A3 | cA3 | bA3 | b | cA4 A3B1 | cA3B1 | bA3B1 | bB1
A1→ A2A3 | bA3 | b | A2A3B1 | bA3B1 | bB1
A2→ aA2 | a | cA4 | c
A3→ bA3 | b
A4→ cA4 | c
B1→ A4A3 | A3 | A4A3B1 | A3B1
Garantindo que todo 
lado direito inicie com 
terminal (Etapa 4)
P
rof
.
 Y
a
nd
re
 M
ald
o
n
ad
o
 
-55
Bibliografia
� MENEZES, Paulo Blauth. Linguagens 
Formais e Autômatos. Porto Alegre: Editora 
Sagra-Luzzatto, 1998;
� DELAMARO, Márcio Eduardo. Linguagens 
Formais e Autômatos. UEM, 1998;
� VIEIRA, Newton José. Introdução aos 
Fundamentos da Computação. São Paulo: 
Editora Thomson Learning, 2006.

Outros materiais