En la teoría del lenguaje formal , se dice que una gramática libre de contexto , G , está en forma normal de Chomsky (descrita por primera vez por Noam Chomsky ) [ 1 ] si todas sus reglas de producción son de la forma: [ 2 ] [ 3 ]
- A → BC , o
- A → a , o
- S → ε,
donde A , B y C son símbolos no terminales , la letra a es un símbolo terminal (un símbolo que representa un valor constante), S es el símbolo inicial y ε denota la cadena vacía . Además, ni B ni C pueden ser el símbolo inicial , y la tercera regla de producción solo puede aparecer si ε está en L ( G ), el lenguaje producido por la gramática libre de contexto G. [ 4 ] : 92–93, 106
Toda gramática en forma normal de Chomsky es libre de contexto y, a la inversa, toda gramática libre de contexto puede transformarse en una equivalente [ nota 1 ] que está en forma normal de Chomsky y tiene un tamaño no mayor que el cuadrado del tamaño de la gramática original.
Conversión de una gramática a la forma normal de Chomsky.
Para convertir una gramática a la forma normal de Chomsky, se aplica una secuencia de transformaciones simples en un orden determinado; esto se describe en la mayoría de los libros de texto sobre teoría de autómatas . [ 4 ] : 87–94 [ 5 ] [ 6 ] [ 7 ] La presentación aquí sigue a Hopcroft, Ullman (1979), pero se adapta para usar los nombres de las transformaciones de Lange, Leiß (2009). [ 8 ] [ nota 2 ] Cada una de las siguientes transformaciones establece una de las propiedades requeridas para la forma normal de Chomsky.
INICIO: Eliminar el símbolo de inicio de los lados derechos.
Introducir un nuevo símbolo de inicio S 0 , y una nueva regla
- S 0 → S ,
donde S es el símbolo de inicio anterior. Esto no cambia el lenguaje producido por la gramática, y S 0 no aparecerá en el lado derecho de ninguna regla.
TÉRMINO: Eliminar reglas con terminales no solitarios
Para eliminar cada regla
- A → X 1 ... a ... X n
con un símbolo terminal a que no es el único símbolo en el lado derecho, introduzca, para cada uno de dichos terminales, un nuevo símbolo no terminal N a , y una nueva regla
- N a → a .
Cambia todas las reglas
- A → X 1 ... a ... X n
a
- A → X 1 ... N a ... X n .
Si aparecen varios símbolos terminales en el lado derecho, reemplácelos simultáneamente por su símbolo no terminal asociado. Esto no altera el lenguaje producido por la gramática. [ 4 ] : 92
BIN: Eliminar los lados derechos con más de 2 no terminales.
Reemplazar cada regla
- A → X 1 X 2 ... X n
con más de 2 no terminales X 1 ,..., X n según las reglas
- A → X 1 A 1 ,
- A 1 → X 2 A 2 ,
- ...,
- A n -2 → X n -1 X n ,
donde A i son nuevos símbolos no terminales. Nuevamente, esto no cambia el lenguaje producido por la gramática. [ 4 ] : 93
DEL: Eliminar reglas ε
Una regla ε es una regla de la forma
- A → ε,
donde A no es S 0 , el símbolo de inicio de la gramática.
Para eliminar todas las reglas de esta forma, primero determine el conjunto de todos los no terminales que derivan ε. Hopcroft y Ullman (1979) llaman a dichos no terminales anulables y los calculan de la siguiente manera:
- Si existe una regla A → ε, entonces A es anulable.
- Si existe una regla A → X 1 ... X n , y cada X i es anulable, entonces A también es anulable.
Obtén una gramática intermedia reemplazando cada regla.
- A → X 1 ... X n
por todas las versiones con algún X i anulable omitido. Al eliminar en esta gramática cada regla ε, a menos que su lado izquierdo sea el símbolo inicial, se obtiene la gramática transformada. [ 4 ] : 90
Por ejemplo, en la siguiente gramática, con símbolo inicial S 0 ,
- S 0 → AbB | C
- B → AA | AC
- C → b | c
- A → a | ε
El no terminal A , y por lo tanto también B , es anulable, mientras que ni C ni S 0 lo son. Por lo tanto, se obtiene la siguiente gramática intermedia: [ nota 3 ]
- S 0 → A b B | A b
B|Ab B |AbB| C - B → AA |
AA | AA|AεA| A C |AC - C → b | c
- A → a | ε
En esta gramática, todas las reglas ε se han " insertado en línea en el sitio de llamada". [ nota 4 ] En el siguiente paso, se pueden eliminar, lo que da como resultado la siguiente gramática:
- S 0 → AbB | Ab | bB | b | C
- B → AA | A | AC | C
- C → b | c
- A → a
Esta gramática produce el mismo lenguaje que la gramática de ejemplo original, a saber. { ab , aba , abaa , abab , abac , abb , abc , b , ba , baa , bab , bac , bb , bc , c }, pero no tiene reglas ε.
UNIDAD: Eliminar las reglas de la unidad
Una regla de unidad es una regla de la forma
- A → B ,
donde A y B son símbolos no terminales. Para eliminarlo, para cada regla
- B → X 1 ... X n ,
donde X 1 ... X n es una cadena de no terminales y terminales, agregar regla
- A → X 1 ... X n
a menos que se trate de una regla de unidad que ya se haya eliminado (o se esté eliminando). La omisión del símbolo no terminal B en la gramática resultante es posible debido a que B es un miembro del cierre de unidad del símbolo no terminal A. [ 9 ]
Orden de las transformaciones
Al elegir el orden en que se aplicarán las transformaciones anteriores, es necesario considerar que algunas transformaciones pueden anular el resultado obtenido por otras. Por ejemplo, START reintroducirá una regla de unidad si se aplica después de UNIT . La tabla muestra los órdenes admitidos.
Además, el aumento de tamaño de la gramática en el peor de los casos [ nota 5 ] depende del orden de transformación. Usando | G | para denotar el tamaño de la gramática original G , el aumento de tamaño en el peor de los casos puede variar de | G | 2 a 22 |G| , dependiendo del algoritmo de transformación utilizado. [ 8 ] : 7 El aumento de tamaño de la gramática depende del orden entre DEL y BIN . Puede ser exponencial cuando DEL se realiza primero, pero es lineal en caso contrario. UNIT puede incurrir en un aumento cuadrático en el tamaño de la gramática. [ 8 ] : 5 Los ordenamientos START , TERM , BIN , DEL , UNIT y START , BIN , DEL , UNIT , TERM conducen al menor aumento (es decir, cuadrático).
Ejemplo

La siguiente gramática, cuyo símbolo inicial es Expr , describe una versión simplificada del conjunto de todas las expresiones aritméticas sintácticamente válidas en lenguajes de programación como C o Algol60 . Tanto los números como las variables se consideran símbolos terminales por simplicidad, ya que en la interfaz del compilador su estructura interna generalmente no es considerada por el analizador sintáctico . El símbolo terminal "^" denotaba la exponenciación en Algol60.
En el paso "INICIO" del algoritmo de conversión anterior , simplemente se agrega una regla S 0 → Expr a la gramática. Después del paso "TERMINO", la gramática se ve así:
Tras el paso "BIN", se obtiene la siguiente gramática:
Dado que no hay reglas ε, el paso "DEL" no cambia la gramática. Después del paso "UNIT", se obtiene la siguiente gramática, que está en forma normal de Chomsky:
Los N a introducidos en el paso "TERM" son PowOp , Open y Close . Los A i introducidos en el paso "BIN" son AddOp_Term , MulOp_Factor , PowOp_Primary y Expr_Close .
Definición alternativa
Forma reducida de Chomsky
Otra forma [ 4 ] : 92 [ 10 ] de definir la forma normal de Chomsky es:
Una gramática formal está en forma reducida de Chomsky si todas sus reglas de producción tienen la forma:
- o
- ,
dónde,yson símbolos no terminales yes un símbolo terminal . Al usar esta definición,opuede ser el símbolo de inicio. Solo aquellas gramáticas libres de contexto que no generan la cadena vacía pueden transformarse en la forma reducida de Chomsky.
Forma normal de Floyd
En una carta donde propuso un término forma Backus-Naur (BNF), Donald E. Knuth insinuó que una "sintaxis BNF en la que todas las definiciones tienen tal forma puede decirse que están en 'Forma Normal de Floyd'",
- ::=\,\langle B\rangle \mid \langle C\rangle } o
- ::=\,\langle B\rangle \langle C\rangle } o
- ::=\,a} ,
dónde,yson símbolos no terminales yes un símbolo terminal, porque Robert W. Floyd descubrió en 1961 que cualquier sintaxis BNF se puede convertir a la anterior. [ 11 ] Pero retiró este término, "ya que sin duda muchas personas han utilizado de forma independiente este hecho simple en su propio trabajo, y el punto es solo incidental a las consideraciones principales de la nota de Floyd". [ 12 ] Mientras que la nota de Floyd cita el artículo original de Chomsky de 1959, la carta de Knuth no lo hace.
Solicitud
Además de su importancia teórica, la conversión a CNF se utiliza en algunos algoritmos como paso de preprocesamiento, por ejemplo, el algoritmo CYK , un análisis sintáctico ascendente para gramáticas libres de contexto, y su variante probabilística CKY. [ 13 ]
Véase también
- Forma de Backus-Naur
- Algoritmo CYK
- Forma normal de Greibach
- Forma normal de Kuroda
- Lema de bombeo para lenguajes libres de contexto : su demostración se basa en la forma normal de Chomsky.
Notas
- ↑ es decir, uno que produce el mismo idioma
- ↑ Por ejemplo, Hopcroft, Ullman (1979) fusionaron TERM y BIN en una sola transformación.
- ↑ indica un N no terminal conservado y omitidopor N y
N, respectivamente. - ↑ Si la gramática tuviera una regla S 0 → ε, no podría ser "insertada", ya que no tendría "puntos de llamada". Por lo tanto, no podría ser eliminada en el siguiente paso.
- ↑ es decir, longitud escrita, medida en símbolos
Referencias
- ↑ Chomsky, Noam (1959). "Sobre ciertas propiedades formales de las gramáticas". Information and Control . 2 (2): 137– 167. doi : 10.1016/S0019-9958(59)90362-6 .Aquí: Sec.6, pág. 152 y siguientes.
- ↑ D'Antoni, Loris. "Página 7, Lección 9: Algoritmos de análisis sintáctico ascendente" (PDF) . CS536-S21 Introducción a los lenguajes de programación y compiladores . Universidad de Wisconsin-Madison. Archivado (PDF) del original el 19 de julio de 2021.
- ↑ Sipser, Michael (2006). Introducción a la teoría de la computación (2.ª ed.). Boston: Thomson Course Technology. Definición 2.8. ISBN 0-534-95097-3OCLC 58544333
- 1 2 3 4 5 6 Hopcroft, John E.; Ullman, Jeffrey D. (1979). Introducción a la teoría de autómatas, lenguajes y computación . Reading, Massachusetts: Addison-Wesley Publishing. ISBN 978-0-201-02988-8.
- ↑ Hopcroft, John E.; Motwani, Rajeev; Ullman, Jeffrey D. (2006). Introducción a la teoría de autómatas, lenguajes y computación (3.ª ed.). Addison-Wesley. ISBN 978-0-321-45536-9.Sección 7.1.5, pág. 272
- ↑ Rich, Elaine (2007). "11.8 Formas normales". Autómatas, computabilidad y complejidad: teoría y aplicaciones (PDF) (1.ª ed.). Prentice-Hall. pág. 169. ISBN 978-0132288064.
{{cite book}}: CS1 maint: servicio de archivado obsoleto ( enlace ) - ^ Wegener, Ingo (1993). Theoretische Informatik: un algoritmo orientado a la configuración . Leitfäden und Mongraphien der Informatik (en alemán). Stuttgart: BG Teubner. ISBN 978-3-519-02123-0.Sección 6.2 "Die Chomsky-Normalform für kontextfreie Grammatiken", p. 149-152
- 1 2 3 Lange, Martin; Leiß, Hans (2009). " ¿ CNF o no CNF? Una versión eficiente y presentable del algoritmo CYK" (PDF) . Informatica Didactica . 8. Archivado (PDF) del original el 19 de julio de 2011.
- ↑ Allison, Charles D. (2022). Fundamentos de la computación: Una introducción accesible a los autómatas y los lenguajes formales . Fresh Sources, Inc. pág. 176. ISBN 9780578944173.
- ↑ Hopcroft et al. (2006)
- ↑ Floyd, Robert W. (1961). «Nota sobre la inducción matemática en las gramáticas de estructura sintáctica» (PDF) . Information and Control . 4 (4): 353– 358. doi : 10.1016/S0019-9958(61)80052-1 . Archivado (PDF) del original el 5 de marzo de 2021.Aquí: pág. 354
- ↑ Knuth, Donald E. (diciembre de 1964). "Forma normal de Backus frente a forma normal de Backus" . Communications of the ACM . 7 (12): 735– 736. doi : 10.1145/355588.365140 . S2CID 47537431 .
- ↑ Jurafsky, Daniel; Martin, James H. (2008). Procesamiento del habla y del lenguaje (2.ª ed.). Pearson Prentice Hall. pág. 465. ISBN 978-0-13-187321-6.
Lecturas adicionales
- Cole, Richard. Conversión de CFG a CNF (Forma Normal de Chomsky) , 17 de octubre de 2007. (pdf) — utiliza el orden TERM, BIN, START, DEL, UNIT.
- John Martin (2003). Introducción a los lenguajes y la teoría de la computación . McGraw Hill. ISBN 978-0-07-232200-2.(Páginas 237-240 de la sección 6.6: formas simplificadas y formas normales).
- Michael Sipser (1997). Introducción a la teoría de la computación . PWS Publishing. ISBN 978-0-534-94728-6.(Páginas 98-101 de la sección 2.1: gramáticas libres de contexto. Página 156.)
- Charles D. Allison (2021) (20 de agosto de 2021). Fundamentos de la informática: Una introducción accesible al lenguaje formal . Fresh Sources, Inc. ISBN 9780578944173.
{{cite book}}: CS1 maint: nombres numéricos: lista de autores ( enlace ) (páginas 171-183 de la sección 7.1: Forma normal de Chomsky) - Sipser, Michael. Introducción a la teoría de la computación, 2ª edición.
- Alexander Meduna (6 de diciembre de 2012). Autómatas y lenguajes: teoría y aplicaciones . Springer Science & Business Media. ISBN 978-1-4471-0501-5.
- Lenguajes formales
- Noam Chomsky