240 likes | 482 Views
FORMAS NORMALES. Tomado de Sudkamp: Languages and Machines Cap. 5. Gramática regular. Forma normal de Chomsky. A aB A a A . A BC A a S . S no aparece al lado derecho de ninguna producción.
E N D
FORMAS NORMALES Tomado de Sudkamp: Languages and Machines Cap. 5.
Gramática regular Forma normal de Chomsky A aB A a A A BC A a S S no aparece al lado derecho de ninguna producción Forma normal de Greibach A aA1A2A3…. An A a S
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) • NULL=:{A | A } • Repeat • 2.1 PREV:=NULL • 2.2 for each variable AV do • if there is an A rule A w and wPREV* then • NULL=NULL{A} • until NULL=PREV
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 • {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) • SLno 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 dondeA1…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} Σ = {a,b} P: S → ACA A → aAa | B | C B → Bb | b C → cC | Símbolos anulables: S,A,C GL: V = {S, A, B, C} Σ = {a,b} P: S → ACA|CA|AC|AA|A|C| A → aAa |aa | B | C 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 deA.
Ejemplo 5.2.1 CHAIN RULES Chain(S)= {S,A,C,B} Chain(A)= {A,C,B} Chain(B)= {B} Chain(C)= {C} 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
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 AV do if existeA → w con w(PREV)* then TERM:=TERM{A} untilPREV:=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 PREV • {B,F} 2. {B,F,A,S} {B,F} 3. {B, F, A, S, E} {B,F,A,S} 4. {B, F, A, S, E} {B, F, A, S, E} S → BS | B A → aA | aF B → b E → aA | BSA F → bB | b GT :
Construcción del conjunto de variables ALCANZABLES. • REACH:={S} • PREV:= • repeat NEW:=REACH-PREV PREV:=REACH for cada variable ANEW do for cada reglaA → w agrege a REACH todas las variables de w untilREACH:=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 Iter. REACH PREV NEW • {S} {S} 2. {S,B} {S} {B} 3. {S, B } {S, B} S → BS | B B → b GU : S → BS | B A → aA | aF B → b E → aA | BSA F → bB | b GT :
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 → B’T T → AW W →A’D A → bAaD A → B’AA’D B’ → b A’ →a
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. (bvc)*a(bvc)* ba* (bvc)(avb)* A → A B |BA | a B → b | c A → A a | b A → A a | Ab| b | c A → bZ | cZ Z→aZ | bZ | a | b A → BAZ | aZ | BA Z→BZ | B B→b | c A → bZ | b Z→aZ | a
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 A → aA1A2A3…. An A → a S → S → AB | A → AB | CB | a B → AB | b C → AC | c G 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 → 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 | CBR1C | CBC | aC | c R1→BR1 | B C → aR1C | aC | c | aR1CR2 | aCR2 | cR2 R2→BR1CR2 | BCR2 |BR1C|BC