Sei sulla pagina 1di 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)

Yonni Lpez Cortes


Ingeniera en Telemtica
Paradigmas de programacin
24 de enero del 2011

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:
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 representar 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


(;).

Yonni Lpez Cortes


Ingeniera en Telemtica
Paradigmas de programacin
24 de enero del 2011

El operador | indica una alternativa de regla de produccin.

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
especiales.

de

interrogacin

(?)

se

pueden

poner

smbolos

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.

Potrebbero piacerti anche