FORMAS NORMALES - Noticias | Facultad de Ciencias de la

Download Report

Transcript FORMAS NORMALES - Noticias | Facultad de Ciencias de la

FORMAS NORMALES
Tomado de Sudkamp:
Languages and Machines
Cap. 5.
Gramática regular
Forma normal de Chomsky
A
aB
A
BC
A
a
A
a
A

S

Forma normal de Greibach
A
aA1A2A3…. An
A
a
S

S no aparece al lado
derecho de ninguna
producción
• Evite que el símbolo de arranque sea
recursivo.
• Eliminación de reglas Lambda
• Eliminación de las reglas en cadena
(chain rules).
• Símbolos inútiles
Algoritmo 5 .1. 2
Costrucción del conjunto de variables anulables
Input: Context-free Grammar G=(V,,P,S)
1. NULL=:{A | A
}
2. Repeat
2.1 PREV:=NULL
2.2 for each variable AV do
if there is an A rule A
NULL=NULL{A}
until NULL=PREV
w and wPREV* then
EJEMPLO 5.1.2
G: V = {S, A, B, C}
Σ = {a,b}
P: S → ACA
A → aAa | B | C
B → Bb | b
C → cC | 
Iter.
NULL
PREV
1.
{C}
2.
{A,C}
{C}
3.
{S, A, C}
{A,C}
4.
{S, A, C}
{S,A,C}
Teorema 5.1.5
• Dada G =(V,,P,S) una cfg, existe un
algoritmo que construye una gramática cfg
GL=(VL,,PL,SL) tal que :
• L(G)=L(GL)
• SL no es una variable recursiva.
• A →  si y solo sí L(G) y A=SL.
DEMOSTRACIÓN
Construcción de GL
VL es V con un nuevo símbolo de arranque si es necesario.
Construcción de PL
Si L(G) entonces SL → 
Sea A→ w una regla de P. Si w puede escribirse de la forma
w1A1w2A2….wkAkwk+1
donde A1…A2, Ak son símbolos anulables entonces
A→ w1w2….wkwk+1
Es una regla de PL.
A →  si y solo si L(G) y A=SL.
Ejemplo 5.1.4
G: V = {S, A, B, C}
Símbolos anulables: S,A,C
Σ = {a,b}
GL: V = {S, A, B, C}
P: S → ACA
Σ = {a,b}
A → aAa | B | C
P: S → ACA|CA|AC|AA|A|C|
B → Bb | b
A → aAa |aa | B | C
C → cC | 
B → Bb | b
C → cC | c
G: S => ACA
=>aAaCA
=> aBaCA
=>abaCA
=>abaA
=>abaC
=>aba
G: S => A
=>aAa
=>aBa
=> aba
Reglas en cadena
• Es una regla de la forma A → B.
• CHAIN(A) comprende además de A, todas
las símbolos auxiliares que se derivan de
A.
• Es decir CHAIN(A)={B | A=>*B}{A}.
• CHAIN(A) se construye recursivamente a
partir de A.
Ejemplo 5.2.1
CHAIN RULES
G: V = {S, A, B, C}
Σ = {a,b}
P: S → ACA|CA|AC|AA|AC|A|C|
A → aAa | B | C
B → Bb | b
C → cC | c
S → ACA| CA| AC| AA| AC| 
S → aAa| Bb| b| cC| c
A → aAa| Bb| b| cC| c
B→ Bb| b
C → cC| c
Chain(S)= {S,A,C,B}
Chain(A)= {A,C,B}
Chain(B)= {B}
Chain(C)= {C}
Símbolos Inútiles
• Hay dos clases de símbolos inútiles:
• Aquellos que no derivan cadenas de
símbolos terminales (estériles).
• Aquellos que no son alcanzables a partir
de S (inalcanzables).
• El teorema 5.3.3 garantiza que para toda cfg
existe una equivalente sin símbolos estériles.
• El teorema 5.3.6 garantiza que para toda cfg
existe una equivalente sin símbolos inútiles.
Construcción del conjunto de
variables no estériles.
• TERM:={A | existe A → w con w* }.
• repeat
PREV:=TERM
for cada variable AV do
if existe A → w con w(PREV)* then
TERM:=TERM{A}
until PREV:=TERM
EJEMPLO 5.3.1
S → AC| BS | B
A → aA | aF
B → CF | b
C → cC | D
D → aD | BD | C
E → aA | BSA
F → bB | b
Iter.
TERM
1.
{B,F}
2.
{B,F,A,S}
3.
4.
GT :
{B, F, A, S, E}
{B, F, A, S, E}
S → BS | B
A → aA | aF
B→ b
E → aA | BSA
F → bB | b
PREV
{B,F}
{B,F,A,S}
{B, F, A, S, E}
Construcción del conjunto de
variables ALCANZABLES.
• REACH:={S}
• PREV:=
• repeat
NEW:=REACH-PREV
PREV:=REACH
for cada variable ANEW do
for cada regla A → w agrege a REACH todas
las variables de w
until REACH:=PREV
EJEMPLO 5.3.2
S → AC| BS | B
A → aA | aF
B → CF | b
C → cC | D
D → aD | BD | C
E → aA | BSA
F → bB | b
GT :
S → BS | B
A → aA | aF
B→ b
E → aA | BSA
F → bB | b
Iter.
REACH
1.
{S}
2.
{S,B}
{S}
{B}
3.
{S, B }
{S, B}

GU :
PREV
NEW
{S}
S → BS | B
B→ b
FN de CHOMSKY
•
•
•
•
•
Se parte de una gramática que:
El símbolo de arranque no es recursivo.
No contiene variables anulables salvo S.
No contiene reglas en cadena.
No tiene símbolos inútiles.
A → bAaD
A → B’AA’D
A → B’T
B’ → b
T → AW
A’ →a
W →A’D
Ejemplo 5.4.2 (AE)
AE:
V = {S, A, T}
Σ = {b, +, (, )}
P: 1. S → A
2. A → T
3. A → A + T
4. T → b
5. T → (A)
S → A + T | b | (A)
A → A + T | b | (A)
T → b | (A)
R→)
L→(
P→+
Z →AR
Y →PT
T → b | AY | LZ
S→AY| b | LZ
Eliminar la recursividad a izquierda
directa.
• Se busca eliminar las reglas de tipo
A → Aw como A → A + T.
ba*
A→Aa|b
(bvc)(avb)*
A → A a | Ab| b | c
(bvc)*a(bvc)*
A → A B |BA | a
B→b|c
A → bZ | b
A → bZ | cZ
A → BAZ | aZ | BA
Z → aZ | a
Z → aZ | bZ | a | b
Z → BZ | B
B→b|c
Generalizando…
A → Au1 | Au2 |…| Aun
A → v1 | v2 |…| vk
A → v1 | v2 |…| vk | v1Z | v2Z |…| vk Z
Z → u1Z | u2Z|…| unZ
Conversión a fn de Greibach
Forma normal de Greibach
G
S → AB | 
A → AB | CB | a
B → AB | b
C → AC | c
S → AB | 
A → aR1 | CBR1 | CB | a
B → AB | b
C → AC | c
R1 →BR1 | B
A → aA1A2A3…. An
A→a
S→
S → AB | 
A → aR1 | CBR1 | CB | a
B → aR1B | CBR1B | CBB | aB | b
C → AC | c
R1 →BR1 | B
LEMA 5.6.2 La regla A →uBv se puede reemplazar por
A→uk1v|…|uknv donde B→k1|…| kn son todas las B reglas.
continuamos
S → AB | 
A → aR1 | CBR1 | CB | a
B → aR1B | CBR1B | CBB | aB | b
C → AC | c
R1 →BR1 | B
S → AB | 
A → aR1 | CBR1 | CB | a
B → aR1B | CBR1B | CBB | b
C → aR1C | aC
CBR
| CBC
| c 2 | cR2
| c1C| aR
| aCR
1CR|2 aC
R1 →BR1 | B
R2 → BR1CR2 | BCR2 |BR1C|BC