notacion nbf.docx

4
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 los sistemas 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

Upload: antonioperez

Post on 20-Feb-2016

216 views

Category:

Documents


0 download

DESCRIPTION

jj

TRANSCRIPT

Page 1: notacion nbf.docx

Yonni López Cortes Ingeniería en Telemática

Paradigmas de programación24 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 los sistemas 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:

Page 2: notacion nbf.docx

Yonni López Cortes Ingeniería en Telemática

Paradigmas de programación24 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,1,2…8,9,+,-} y el símbolo 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 derivación del entero -32 en esta gramática 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 especificación de las reglas de producción de la gramática. La motivación para usar EBNF radica que con BNF los elementos repetitivos necesitan de más reglas de producción para trabajar.

Características de la notación EBNF

• Las reglas de producción pueden contener espacios.

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

• Cada regla de producción termina con el símbolo de punto y com (;).

• El operador | indica una alternativa de regla de producción.

Page 3: notacion nbf.docx

Yonni López Cortes Ingeniería en Telemática

Paradigmas de programación24 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 producción.

Las llaves ({}) indican elementos repetitivos (operador estrella: *)

natural = digito sin cero, {digito};

Los corchetes ([]) se manejan para elementos auxiliares.

entero = “0” | [“-”], natural

Entre símbolos de interrogación (?) se pueden poner símbolos especiales.

Un espacio en blanco se define como: espacio = ? US-ASCII character 32 ?;

Se pueden poner comentarios con los símbolos (* comentario *)

Los paréntesis “(” y “)” se utilizan para agrupar símbolos. El símbolo “-” sirve para expresar excepciones.

Se utiliza “*” para indicar repeticion, por ejemplo

regla = “A”;

repetición = 3 * aa, “B”;

Si se deriva la regla de producción repetición la cadena generada sería: AAAB

Se pueden anidar operadores como *, {} y [] para lograr cualquier tipo de repetición.

Tanto BNF como EBNF pueden determinar cualquier tipo de gramática, sencillamente EBNF permite simplificar y tener menos ambigüedad en la metasintaxis.