Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Formas Normales
Formas Normales
Este documento tiene como fin mostrar la forma de obtener la Forma Normal de Chomsky (FNC o tambin CNF) y la Forma Normal de Greibach (FNG o tambin GNF) de una gramtica dada, mediante un ejercicio e !licati"o# $a gramtica en cuesti%n del ejercicio es la siguiente& ' ( ) * +Ca * a,cd * E,F ) ( a)b * c + ( C, * b * ECd * )d C ( Cc * +b * )aE * , ( a,d * ,d * E ( aaE+ * EFG F ( aFd * d ,urante este ejercicio, la gramtica ir sufriendo modificaciones -ue en algunos casos mantendr a su lenguaje intacto y en otras lo alterar#
E entre medio, la cual toda"0a no sabemos si es generadora# 8u recursi"o, 9eh: 2ues bueno, la recursi%n llega hasta ah0& No sabemos si E es generador y no hay ninguna otra !roducci%n de E -ue nos ayude a "erificar esto, as0 -ue la !rimera !roducci%n no nos sir"e !ara determinar a E como un s0mbolo generador, y como no !odemos "erificar -ue E es un s0mbolo generador, entonces lo consideramos como un s0mbolo N; generador# 2rocedemos ahora a eliminar las "ariables E y G de la gramtica y a todas las !roducciones en las -ue estn !resentes# ; sea, eliminamos ' ( E,F , + ( ECd, C ( )aE, E ( aaE+ y E ( EF# $a gramtica -ueda como sigue& ' ( ) * +Ca * a,cd ) ( a)b * c + ( C, * b * )d C ( Cc * +b * , ( a,d * ,d * F ( aFd * d 2uede -ue al lector le im!orte saber -ue no se altera el lenguaje de la gramtica cuando se eliminan los s0mbolos no generadores#
Eliminando Producciones
)hora "iene un !aso un !oco ms dif0cil# $a eliminaci%n de !roducciones consiste !rinci!almente en eliminar las !roducciones de la forma < ( # Cuando uno haga esto, lo -ue tendr -ue hacer es contem!lar la !osibilidad de -ue, en donde antes a!arec0a la "ariable <, sta ahora !odr a!arecer o no a!arecer, ya -ue en una estar jugando el !a!el de ser el string "ac0o y en la otra se estar siendo otra cosa# =)h> =?a estamos listos entonces> +ueno, no del todo& 98u !asa si una "ariable tiene una !roducci%n -ue est com!uesta de "arios s0mbolos -ue !ueden ser reem!la.ables !or el string "ac0o: 2or ejem!lo, digamos -ue tenemos ? ( <@<A<B###<n, donde todos los <i !ueden ser el string # Entonces nos -uedar0a una cosa as0& ? ( ..., -ue se !uede sim!lificar !or ? ( # )-u0 "emos -ue ? tambin !uede generar al string "ac0o# Entonces "amos a definir a los s0mbolos Anulables# 5n s0mbolo anulable ? "a a ser a-uel -ue tenga entre sus !roducciones a la !roducci%n ? ( o tambin a-uel -ue tenga !or lo menos una !roducci%n en donde todas las "ariables in"olucradas son anulables a su "e.# 7iendo nuestro ejem!lo, !odemos identificar r!idamente a dos "ariables -ue son s0mbolos anulables& las "ariables C y ,, ya -ue ambas tienen la !roducci%n de la forma ? ( # 2ero ojo, -ue no son las /nicas "ariables anulables# 3ambin est + -ue tiene la !roducci%n + ( C,, la cual est com!uesta enteramente !or s0mbolos anulables# +ien, !rocedamos a eliminar las !roducciones # 9C%mo hacemos esto: 6uy fcil& en cada !roducci%n en la -ue estaban !resentes uno o ms s0mbolos anulables, "emos todas las combinaciones en las -ue cada una de dichas "ariables !udiera estar !resente o no# 2or ejem!lo, si tenemos la !roducci%n
? ( ab<@, donde <@ es anulable, entonces se generan las !roducciones ? ( ab<@ y ? ( ab, una en donde <@ est !resente y otra en la -ue no# 7eamos el caso !ara !roducciones con dos y tres "ariables anulables& ? ( a<@bb<A CD ? ( a<@bb<A * a<@bb * abb<A * abb ? ( c<@<Add<Ba CD ? ( c<@<Add<Ba * c<@<Adda * c<@dd<Ba * c<Add<Ba * c<@dda * c<Adda * cdd<Ba * cdda En general, si tenemos una !roducci%n con n s0mbolos anulables, tendremos -ue reem!la.ar esa !roducci%n con a lo ms An !roducciones# En nuestro caso, la gramtica -uedar0a como sigue& ' ( ) * +Ca * +a * Ca * a * a,cd * acd ) ( a)b * c + ( C, * C * , * b * )d C ( Cc * c * +b * b , ( a,d * ad * ,d * d 6iren como de re!ente ha crecido nuestra -uerida gramtica# No han a!arecido nue"as "ariables, !ero s0 surgieron ms !roducciones# 2ero esto no se detiene a-u0# ;jo, -ue ahora s0 -ue se !uede haber alterado el lenguaje# 'i nuestra gramtica inicial era ca!a. de generar el string "ac0o, ahora no lo !odr generar#
-ue tendrn una /nica !roducci%n (la !roducci%n de dicho s0mbolo)# En nuestro caso, hay -ue crear H nue"as "ariables, una !ara cada s0mbolo terminal& ' ( )@)+@ * c * +C)@ * +)@ * C)@ * a * )@,C@,@ * )@C@,@ ) ( )@)+@ * c + ( C, * CC@ * c * ++@ * b * )@,,@ * )@,@ * ,,@ * d * ),@ C ( CC@ * c * ++@ * b , ( )@,,@ * )@,@ * ,,@ * d )@ (a +@ (b C@ (c ,@ (d Este ti!o de modificaciones no altera el lenguaje de la gramtica#
,ejamos el s0mbolo original a la i.-uierda de cada l0nea !ara -ue se entienda cul fue la "ariable enumerada -ue reem!la.% a cada "ariable# N%tese -ue cambiamos de orden a la "ariable ), al !onerla !or debajo de la "ariable ,# El !ro!%sito de estas alteraciones en el orden original tienen como fin -ue, al !roceder con la enumeraci%n, en las !roducciones resultantes -uede la menor cantidad de !roducciones <i ( <j, en donde i sea mayor -ue j# A# Eliminamos la recursi%n inmediata a la i.-uierda y la recursi%n a la i.-uierda# 98u se entiende !or recursi%n inmediata a la i.-uierda: Cuando tenemos una !roducci%n de la forma < ( < , decimos -ue < es tiene recursi"idad inmediara !or la i.-uierda# Cuando tenemos !or lo menos una !roducci%n de la forma < ( ?, y la "ariable ? tiene !or lo menos una !roducci%n de la forma ?(< decimos -ue < recursi"idad !or la i.-uierda# 9C%mo eliminamos la recursi%n !or la i.-uierda: 2rimero reem!la.amos en las !roducciones de < todas las a!ariciones de ? !or a-uellas !roducciones de ? -ue no sean inmediatamente recursi"as a la i.-uierda !ara ?# Con esto logramos hacer -ue < tenga s%lo !roducciones inmediatamente recursi"as !or la i.-uierda# $uego, su!ongamos -ue < tiene las siguientes !roducciones& < ( <1 * <2 * ### * <n * 1 * 2 * ### * m ,onde las !roducciones j no son recursi"as !or la i.-uierda# )hora creamos una "ariable au iliar <R y reali.amos las siguientes transformaciones& < ( 1 * 2 * ### * m * 1<R * 2<R * ### * m<R <R ( 1 * 2 * ### * n<R * 1<R * 2<R * ### * n<R En nuestro caso, las "ariables -ue tienen !roducciones inmediatamente recursi"as !or la i.-uierda son <M , <N y <P, debido a sus !roducciones <M ( <M<@A, <N ( <N<@B y <P ( <P<@H# 3ambin tenemos la !roducci%n <N(<M<@A -ue es recursi"a a la i.-uierda !ara la "ariable <M, y las !roducciones <M(<N<P y <M(<N<@B -ue son recursi"as a la i.-uierda !ara la "ariable <N# 2rocedemos a dejar a ambas "ariables /nicamente con recursi"idad inmediata a la i.-uierda& @) Jeem!la.ando a <N !or sus !roducciones no recursi"as a la i.-uierda, las !roducciones <M ( <N<P * <N<@B * c * <M<@A * b * <@@<Q * <@@<@H * <P<@H * d * <@O<@H se transforman en& <M ( c<P * <M<@A<P * b<P * c<@B * <M<@A<@B * b<@B * c * <M<@A * b * <@@<Q * <@@<@H * <P<@H * d * <@O<@H N%tese -ue no reem!la.amos a <N !or su !roducci%n <N(<N<@B, ya -ue esta !roducci%n es recursi"a !or la i.-uierda !ara <N#
A) Jeem!la.ando a <M !or sus !roducciones no recursi"as a la i.-uierda, las !roducciones <N ( <N<@B * c * <M<@A * b se transforman en& <N ( <N<@B * c * <N<P<@A * <N<@B<@A * c<@A * b<@A * <@@<Q<@A * <@@<@H<@A * <P<@H<@A * d<@A * <@O<@H<@A * b )-u0 tam!oco reem!la.amos a <M !or su !roducci%n <M ( <M<@A, ya -ue esta !roducci%n es recursi"a !or la i.-uierda !ara <M# )hora -ue solamente tenemos recursi"idad inmediata !or la i.-uierda, !rocedemos a reali.ar las corres!ondientes transformaciones& @) $as !roducciones <M ( c<P * <M<@A<P * b<P * c<@B * <M<@A<@B * b<@B * c * <M<@A * b * <@@<Q * <@@<@H * <P<@H * d * <@O<@H se transforman en& <M ( c<P * b<P * c<@B * b<@B * c * b * <@@<Q * <@@<@H * <P<@H * d * <@O<@H * c<P<M#@ * b<P<M#@ * c<@B<M#@ * b<@B<M#@ * c<M#@ * b<M#@ * <@@<Q<M#@ * <@@<@H<M#@ * <P<@H<M#@ * d<M#@ * <@O<@H<M#@ <M#@ ( <@A<P * <@A<@B * <@A * <@A<P<M#@ * <@A<@B<M#@ * <@A<M#@ A) $as !roducciones <N ( <N<@B * c * <N<P<@A * <N<@B<@A * c<@A * b<@A * <@@<Q<@A * <@@<@H<@A * <P<@H<@A * d<@A * <@O<@H<@A * b se transforman en& <N ( c * c<@A * b<@A * <@@<Q<@A * <@@<@H<@A * <P<@H<@A * d<@A * <@O<@H<@A * b * c<N#@ * c<@A<N#@ * b<@A<N#@ * <@@<Q<@A<N#@ * <@@<@H<@A<N#@ * <P<@H<@A<N#@ * d<@A<N#@ * <@O<@H<@A<N#@ * b<N#@ <N#@ ( <@B * <P<@A * <@B<@A * <@B<N#@ * <P<@A<N#@ * <@B<@A<N#@ B) ? las !roducciones <P ( <@@<Q * <@@<@H * <P<@H * d se transforman en& <P ( <@@<Q * <@@<@H * d * <@@<Q<P#@ * <@@<@H<P#@ * d<P#@ <P#@ ( <@H * <@H<P#@ Nuestra gramtica, libre de recursi"idad !or la i.-uierda, -ueda como sigue& <@ <A <B <H <K <M ( ( ( ( ( ( <@@<A * c * <M<B * <M<@@ * <N<@@ * a * <@@<H * <@@<K <@O<@A <N<@@ <P<K <@B <@H c<P * b<P * c<@B * b<@B * c * b * <@@<Q * <@@<@H * <P<@H * d * <@O<@H * c<P<M#@ * b<P<M#@ * c<@B<M#@ * b<@B<M#@ * c<M#@ * b<M#@ * <@@<Q<M#@ * <@@<@H<M#@ * <P<@H<M#@ * d<M#@ * <@O<@H<M#@ <@A<P * <@A<@B * <@A * <@A<P<M#@ * <@A<@B<M#@ * <@A<M#@ <P<@A c * c<@A * b<@A * <@@<Q<@A * <@@<@H<@A * <P<@H<@A * d<@A * <@O<@H<@A * b * c<N#@ * c<@A<N#@ * b<@A<N#@ * <@@<Q<@A<N#@ * <@@<@H<@A<N#@ * <P<@H<@A<N#@ * d<@A<N#@ * <@O<@H<@A<N#@ * b<N#@ <@B * <P<@A * <@B<@A * <@B<N#@ * <P<@A<N#@ * <@B<@A<N#@ <@@<Q * <@@<@H * d * <@@<Q<P#@ * <@@<@H<P#@ * d<P#@ <@H * <@H<P#@ <@@<A * c a b c d
<M#@ ( <Q ( <N ( <N#@ <P <P#@ <@O <@@ <@A <@B <@H ( ( ( ( ( ( ( (
B# En nuestro tercer !aso, eliminaremos todas las !roducciones de la forma < i ( <j, en donde i es mayor -ue j# 2ara hacer esto, reem!lararemos a <j !or todas sus !roducciones# 'i al reem!la.ar a!arecen otras !roducciones de esta forma, re!etimos este !aso, hasta -ue no -ueden ms !roducciones en donde la !rimera "ariable de la !roducci%n tenga un 0ndice menor al de la "ariable de la cabe.a de la !roducci%n# En nuestro caso, no hay ninguna !roducci%n de este ti!o, !ero "amos a mostrar unas !roducciones de ejem!lo !ara ilustrar el !roceso& <P ( <@@<Q * <@@<@H * d * <@@<Q<P#@ * <@@<@H<P#@ * d<P#@ <@O ( <@@<A * c * <P<@@<M En este ejem!lo, tenemos la !roducci%n <@O ( <P<@@<M en la -ue la "ariable de la i.-uierda de la !roducci%n (<P) tiene un 0ndice menor al de la "ariable de la cabe.a de la !roducci%n (< @O)# Jeem!la.ando <P !or sus corres!ondientes !roducciones nos -ueda&
<@O ( <@@<A * c * <@@<Q<@@<M * <@@<@H<@@<M * d<@@<M * <@@<Q<P#@<@@<M * <@@<@H<P#@<@@<M * d<P#@<@@<M H# En el /ltimo !aso, reem!la.amos todas las !roducciones en las -ue haya una "ariable al !rinci!io de la !roducci%n (no im!orta el 0ndice -ue tenga) !or las !roducciones de dicha "ariable -ue em!iecen con alg/n s0mbolo terminal# Este !roceso se reali.a em!e.ando !or las /ltimas "ariables de la gramtica y luego se contin/a el !roceso de reem!la.o hacia arriba hasta llegar a las !roducciones de la "ariable de inicio# En nuestra gramtica, !artir0amos con las !roducciones de la "ariable <@O (ya -ue <@@, <@A, <@B y <@H tienen !roducciones en las -ue s%lo hay in"olucrados s0mbolos terminales)# $a cosa nos -uedar0a as0& <@O ( <@@<A * c CD <@O ( a<A * c $uego continuar0amos con <P#@& <P#@ ( <@H * <@H<P#@ CD <P#@ ( d * d<P#@ El !roceso no !resenta mayor dificultad, hasta -ue llegamos a <N#@, en donde a!arecen las !roducciones <N#@ ( <P<@A y <N#@ ( <P<@A<N#@, -ue no comien.an con <@@, <@A, <@B o <@H# 2ero no im!orta, ya -ue todas las !roducciones de <P !ara estas alturas del !roceso han sido modificadas !ara -ue em!iecen con un s0mbolo terminal, as0 -ue reem!la.amos <P directamente con sus !roducciones& Esto& <N#@ ( <@B * <P<@A * <@B<@A * <@B<N#@ * <P<@A<N#@ * <@B<@A<N#@ 8ueda como esto& <N#@ ( c * a<Q<@A * a<@H<@A * d<@A * a<Q<P#@<@A * a<@H<P#@<@A * d<P#@<@A * c<@A * c<N#@ * a<Q<@A<N#@ * a<@H<@A<N#@ * d<@A<N#@ * a<Q<P#@<@A<N#@ * a<@H<P#@<@A<N#@ * d<P#@<@A<N#@ * c<@A<N#@ El !roceso contin/a as0 sin mayores com!licaciones, hasta -ue llegamos a la siguiente gramtica en forma normal de Greibach& <@ ( a<A * c * c<P<B * b<P<B * c<@B<B * b<@B<B * c<B * b<B * a<Q<B * a<@H<B * a<Q<@H<B * a<@H<@H<B * d<@H<B * a<Q<P#@<@H<B * a<@H<P#@<@H<B * d<P#@<@H<B * d<B * a<A<@H<B * c<@H<B * c<P<M#@<B * b<P<M#@<B * c<@B<M#@<B * b<@B<M#@<B * c<M#@<B * b<M#@<B * a<Q<M#@<B * a<@H<M#@<B * a<Q<@H<M#@<B * a<@H<@H<M#@<B * d<@H<M#@<B * a<Q<P#@<@H<M#@<B * a<@H<P#@<@H<M#@<B * d<P#@<@H<M#@<B * d<M#@<B * a<A<@H<M#@<B * c<@H<M#@<@H<M#@<B * c<P<@@ * b<P<@@ * c<@B<@@ * b<@B<@@ * c<@@ * b<@@ * a<Q<@@ * a<@H<@@ * a<Q<@H<@@ * a<@H<@H<@@ * d<@H<@@ * a<Q<P#@<@H<@@ * a<@H<P#@<@H<@@ * d<P#@<@H<@@ * d<@@ * a<A<@H<@@ * c<@H<@@ * c<P<M#@<@@ * b<P<M#@<@@ * c<@B<M#@<@@ * b<@B<M#@<@@ * c<M#@<@@ * b<M#@<@@ * a<Q<M#@<@@ * a<@H<M#@<@@ * a<Q<@H<M#@<@@ * a<@H<@H<M#@<@@ * d<@H<M#@<@@ * a<Q<P#@<@H<M#@<@@ * a<@H<P#@<@H<M#@<@@ * d<P#@<@H<M#@<@@ * d<M#@<@@ * a<A<@H<M#@<@@ * c<@H<M#@<@H<M#@<@@ * c<@@ * c<@A<@@ * b<@A<@@ * a<Q<@A<@@ * a<@H<@A<@@ * a<Q<@H<@A<@@ * a<@H<@H<@A<@@ * d<@H<@A<@@ * a<Q<P#@<@H<@A<@@ * a<@H<P#@<@H<@A<@@ * d<P#@<@H<@A<@@ * d<@A<@@ * a<A<@H<@A<@@ * c<@H<@A<@@ * b<@@ * c<N#@<@@ * c<@A<N#@<@@ * b<@A<N#@<@@ * a<Q<@A<N#@<@@ * a<@H<@A<N#@<@@ * a<@H<@A<N#@<@@ * d<@A<N#@<@@ * a<A<@H<@A<N#@<@@ * c<@H<@A<N#@<@@ * b<N#@<@@ * a * a<H * a<K <A ( a<A<@A * c<@A <B ( c<@@ * c<@A<@@ * b<@A<@@ * a<Q<@A<@@ * a<@H<@A<@@ * a<Q<@H<@A<@@ * a<@H<@H<@A<@@ * d<@H<@A<@@ * a<Q<P#@<@H<@A<@@ * a<@H<P#@<@H<@A<@@ * d<P#@<@H<@A<@@ * d<@A<@@ * a<A<@H<@A<@@ * c<@H<@A<@@ * b<@@ * c<N#@<@@ * c<@A<N#@<@@ * b<@A<N#@<@@ * a<Q<@A<N#@<@@ * a<@H<@A<N#@<@@ * a<@H<@A<N#@<@@ * d<@A<N#@<@@ * a<A<@H<@A<N#@<@@ * c<@H<@A<N#@<@@ * b<N#@<@@ <H ( a<Q<K * a<@H<K * d<K * a<Q<P#@<K * a<@H<P#@<K * d<P#@<K <K ( c <@H <M ( c<P * b<P * c<@B * b<@B * c * b * a<Q * a<@H * a<Q<@H * a<@H<@H * d<@H * a<Q<P#@<@H * a<@H<P#@<@H * d<P#@<@H * d * a<A<@H * c<@H * c<P<M#@ * b<P<M#@ * c<@B<M#@ * b<@B<M#@ * c<M#@ * b<M#@ * a<Q<M#@ * a<@H<M#@ * a<Q<@H<M#@ * a<@H<@H<M#@ * d<@H<M#@ * a<Q<P#@<@H<M#@ * a<@H<P#@<@H<M#@ * d<P#@<@H<M#@ * d<M#@ * a<A<@H<M#@ * c<@H<M#@<@H<M#@ <M#@ ( b<P * b<@B * b * b<P<M#@ * b<@B<M#@ * b<M#@ <Q ( a<Q<@A * a<@H<@A * d<@A * a<Q<P#@<@A * a<@H<P#@<@A * d<P#@<@A <N ( c * c<@A * b<@A * a<Q<@A * a<@H<@A * a<Q<@H<@A * a<@H<@H<@A * d<@H<@A * a<Q<P#@<@H<@A * a<@H<P#@<@H<@A * d<P#@<@H<@A * d<@A * a<A<@H<@A * c<@H<@A * b * c<N#@ * c<@A<N#@ * b<@A<N#@ * a<Q<@A<N#@ * a<@H<@A<N#@ * a<@H<@A<N#@ * d<@A<N#@ * a<A<@H<@A<N#@ * c<@H<@A<N#@ * b<N#@ <N#@ ( c * a<Q<@A * a<@H<@A * d<@A * a<Q<P#@<@A * a<@H<P#@<@A * d<P#@<@A * c<@A * c<N#@ * a<Q<@A<N#@ * a<@H<@A<N#@ * d<@A<N#@ * a<Q<P#@<@A<N#@ * a<@H<P#@<@A<N#@ * d<P#@<@A<N#@ * c<@A<N#@ <P ( a<Q * a<@H * d * a<Q<P#@ * a<@H<P#@ * d<P#@ <P#@ ( d * d<P#@ <@O ( a<A * c <@@ ( a <@A ( b <@B ( c <@H ( d ,CCSAOOM#OH#AH