Está en la página 1de 3

Yonni Lpez Cortes Ingeniera en Telemtica Paradigmas de programacin 24 de enero del 2011

BNF y EBNF
Durante una conferencia de la UNESCO sobre el lenguaje de programacin ALGOL 58 el matemtico John Backus presento un informe en el que describa bajo una notacin formal dicho lenguaje. La percusin de este informe fue prcticamente nula hasta que Peter Naur ley el mismo. Viendo que la idea de Backus sobre la definicin formal de ALGOL 58 no era exactamente la que l pensaba realizo una serie de cambios respecto de la formalizacin propuesta por Backus que fue presentada en su informe para el ALGOL 60. Esta ltima notacin formal es la que hoy en da se emplea y se conoce como BNF. BNF, del ingls Backus-Naur Forma como ya se ha dicho fue introducida por John Backus y Peter Naur los cuales fueron los precursores en la utilizacin de una notacin formal para describir la sintaxis de un lenguaje de programacin, conjuntos de comandos o protocolos de comunicacin (Lenguajes independientes del contexto al fin y al cabo). Por tanto la notacin BNF es un mtodo formal para describir lenguajes formales. BNF es una metasintaxis usada para expresar gramticas libres de contexto: es decir, una manera formal de describir lenguajes formales. El BNF se utiliza extensamente como notacin para las gramticas de los lenguajes de programacin de la computadora, de los sistemas de comando y de los protocolos de comunicacin, as como una notacin para representar partes de las gramticas de la lengua (por ejemplo, el metro en la poesa de Venta). La mayora de los libros de textos para la teora o la semntica del lenguaje de programacin documentan el lenguaje de programacin en BNF. En la notacin BNF se utilizan una serie de reglas o producciones cuyo objetivo es la descripcin de unidades sintcticas o smbolos no terminales. Cada regla tiene la siguiente estructura: <No terminal a explicar> ::= Sucesin de terminales y no terminales que explican la parte izquierda Es decir, parte izquierda (dato a explicar) separador (::=) y parte derecha (explicacin o descripcin) La notacin BNF se emplea con frecuencia para especificar los lenguajes de programacin reales. Por ejemplo, los lenguajes ALGOL y PASCAL tuvieron sus gramticas originalmente descritas en BNF. Ejemplo:

Yonni Lpez Cortes Ingeniera en Telemtica Paradigmas de programacin 24 de enero del 2011

La gramtica que presentamos continuacin en notacin BNF genera el lenguaje formado por todos los nmeros enteros: El conjunto de smbolos terminales es T= ,0,1,28,9,+,-} y el smbolo inicial es <entero>, siendo las producciones: <digito> ::= 0 | 1 | 2 | 3 ... | 8 | 9 <entero> ::= <entero con signo> | <entero sin signo> <entero con signo> ::= + <entero sin signo> | - <entero sin signo> <entero sin signo> ::= <digito> | <digito> <entero sin signo> Por ejemplo, la derivacin del entero -32 en esta gramtica es: <entero> <entero con signo> - <entero sin signo> -<digito> <entero sin signo> - <digito> < digito > -3 <digito> -32. EBNF Extended Backus Naur Form es una metasintaxis ampliamente utilizada que mejora a su antecesor BNF. Ha cambiado la forma de realizar la especificacin de las reglas de produccin de la gramtica. La motivacin para usar EBNF radica que con BNF los elementos repetitivos necesitan de ms reglas de produccin para trabajar. Caractersticas de la notacin EBNF Las reglas de produccin pueden contener espacios. Los smbolos terminales se representan con comillas dobles () cuando representan un smbolo del alfabeto y comillas simples () para repres entar cadenas El operador de produccin ahora es el smbolo de igual (=) Se recomienda escribir los smbolos no terminales en minsculas. Cada regla de produccin termina con el smbolo de punto y com (;). El operador | indica una alternativa de regla de produccin.

Yonni Lpez Cortes Ingeniera en Telemtica Paradigmas de programacin 24 de enero del 2011

digito sin cero = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; digito = 0 | digito sin cero Las comas (,) sirven para separar tanto terminales como no terminales de las reglas de produccin. Las llaves ({}) indican elementos repetitivos (operador estrella: *) natural = digito sin cero, {digito}; Los corchetes ([]) se manejan para elementos auxiliares. entero = 0 | *-+, natural Entre smbolos de interrogacin (?) se pueden poner smbolos especiales. Un espacio en blanco se define como: espacio = ? US-ASCII character 32 ?; Se pueden poner comentarios con los smbolos (* comentario *) Los parntesis ( y ) se utilizan para agrupar smbolos. El smbolo - sirve para expresar excepciones. Se utiliza * para indicar repeticion, por ejemplo regla = A; repeticin = 3 * aa, B; Si se deriva la regla de produccin repeticin la cadena generada sera: AAAB Se pueden anidar operadores como *, {} y [] para lograr cualquier tipo de repeticin. Tanto BNF como EBNF pueden determinar cualquier tipo de gramtica, sencillamente EBNF permite simplificar y tener menos ambigedad en la metasintaxis.

También podría gustarte