Yonni López Cortes Ingeniería en Telemática Paradigmas de programación 24 de enero del 2011

BNF y EBNF
Durante una conferencia de la UNESCO sobre el lenguaje de programación ALGOL 58 el matemático John Backus presento un informe en el que describía bajo una notación formal dicho lenguaje. La percusión de este informe fue prácticamente nula hasta que Peter Naur leyó el mismo. Viendo que la idea de Backus sobre la definición formal de ALGOL 58 no era exactamente la que él pensaba realizo una serie de cambios respecto de la formalización propuesta por Backus que fue presentada en su informe para el ALGOL 60. Estaúltima notación formal es la que hoy en día se emplea y se conoce como BNF. BNF, del inglés Backus-Naur Forma como ya se ha dicho fue introducida por John Backus y Peter Naur los cuales fueron los precursores en la utilización de una notación formal para describir la sintaxis de un lenguaje de programación, conjuntos de comandos o protocolos de comunicación (Lenguajes independientes del contexto al fin y al cabo). Por tanto la notación BNF es un método formal para describir lenguajes formales. BNF es una metasintaxis usada para expresar gramáticas libres de contexto: es decir, una manera formal de describir lenguajes formales.El BNF se utiliza extensamente como notación para las gramáticas de los lenguajes de programación de la computadora, de lossistemas de comando y de los protocolos de comunicación, así como una notación para representar partes de las gramáticas de la lengua (por ejemplo, el metro en la poesía de Venta). La mayoría de los libros de textos para la teoría o la semántica del lenguaje de programación documentan el lenguaje de programación en BNF. En la notación BNF se utilizan una serie de reglas o producciones cuyo objetivo es la descripción de unidades sintácticas o símbolos no terminales. Cada regla tiene la siguiente estructura: <No terminal a explicar> ::= Sucesión de terminales y no terminales que explican la parte izquierda Es decir, parte izquierda (dato a explicar) separador (::=) y parte derecha (explicación o descripción) La notación BNF se emplea con frecuencia para especificar los lenguajes de programación reales. Por ejemplo, los lenguajes ALGOL y PASCAL tuvieron sus gramáticas originalmente descritas en BNF. Ejemplo:

.-} y el símbolo inicial es <entero>.La motivación para usar EBNF radica que con BNF los elementos repetitivos necesitan de más reglas de producción para trabajar.<entero sin signo> <entero sin signo> ::= <digito> | <digito><entero sin signo> Por ejemplo.9. ‡ ‡ ‡ ‡ . | 8 | 9 <entero> ::= <entero con signo> | <entero sin signo> <entero con signo> ::= + <entero sin signo> | .<digito>< digito > -<digito><entero sin signo> -3 <digito> -32.Yonni López Cortes Ingeniería en Telemática Paradigmas de programación 24 de enero del 2011 La gramática que presentamos continuación en notación BNF genera el lenguaje formado por todos los números enteros: El conjunto de símbolos terminales es T= {0. EBNF Extended Backus Naur Form es una metasintaxis ampliamente utilizada que mejora a su antecesor BNF.2 8.<entero sin signo> .+.. Características de la notación EBNF ‡ ‡ Las reglas de producción pueden contener espacios. Cada regla de producción termina con el símbolo de punto y com (.). la derivación del entero -32 en esta gramática es: <entero> <entero con signo> . Los símbolos terminales se representan con comillas dobles ( ) cuando representan un símbolo del alfabeto y comillas simples ( ) para representar cadenas El operador de producción ahora es el símbolo de igual (=) Se recomienda escribir los símbolos no terminales en minúsculas.Ha cambiado la forma de realizar la especificación de las reglas de producción de la gramática. El operador | indica una alternativa de regla de producción. siendo las producciones: <digito> ::= 0 | 1 | 2 | 3 .1.

.Yonni López Cortes Ingeniería en Telemática Paradigmas de programación 24 de enero del 2011 digito sin cero = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 . natural Entre símbolos de interrogación (?) se pueden poner símbolos especiales. Los corchetes ([]) se manejan para elementos auxiliares.sirve para expresar excepciones. repetición = 3 * aa. entero = 0 | [ . El símbolo . B . Si se deriva la regla de producción repetición la cadena generada sería: AAAB Se pueden anidar operadores como *. Se utiliza * para indicar repeticion. {} y [] para lograr cualquier tipo de repetición. Las llaves ({}) indican elementos repetitivos (operador estrella: *) natural = digito sin cero. sencillamente EBNF permite simplificar y tener menos ambigüedad en la metasintaxis. Un espacio en blanco se define como: espacio = ? US-ASCII character32 ?. por ejemplo regla = A .]. Se pueden poner comentarios con los símbolos (* comentario *) Los paréntesis ( y ) se utilizan para agrupar símbolos. Tanto BNF como EBNF pueden determinar cualquier tipo de gramática. digito = 0 | digito sin cero Las comas (. {digito}.) sirven para separar tanto terminales como no terminales de las reglas de producción.

Sign up to vote on this title
UsefulNot useful