domingo, 3 de julio de 2011

Backus Naur Form


BNF es un acrónimo de "Backus Naur Form". John Backus y Peter Naur introdujo por primera vez una notación formal para describir la sintaxis de una lengua dada (Esta fue la descripción de la ALGOL 60 lenguaje de programación, ver [Naur 60] ). Para ser precisos, la mayoría de BNF fue presentado por Backus en un informe presentado en una anterior conferencia de la UNESCO en ALGOL 58. Pocos leer el informe, pero cuando Peter Naur leído que estaba sorprendido por algunas de las diferencias que encontró entre su interpretación y Backus de ALGOL 58. Se decidió que para el sucesor de ALGOL, todos los participantes del primer diseño ha llegado a reconocer algunas debilidades, se debe dar en una forma similar, de modo que todos los participantes deben ser conscientes de lo que estaban acordando. Hizo un modificiations pocos que son casi universalmente utilizado y elaborado por su cuenta el BNF para ALGOL 60 en la reunión en que fue diseñado. Dependiendo de cómo se lo atribuyen a la presentación de todo el mundo, que era, ya sea por Backus Naur en 59 o en 60. (Para más detalles sobre este período de programación de la historia de las lenguas, véase la introducción al artículo de Backus premio Turing en Communications of the ACM, vol. 21, No. 8, agosto de 1978. Esta nota fue sugerido por William B. Clodio de Los Alamos Natl . lab).

Desde entonces, casi todos los autores de libros sobre nuevos lenguajes de programación utilizados para especificar las reglas de sintaxis de la lengua. Ver [Jensen 74] y [Wirth 82] para ver ejemplos.
Lo que sigue es tomado de [Marcotty 86] :

Los símbolos de la meta-BNF son los siguientes:
:: =
que significa "se define como"
|
que significa "o"
<> 
paréntesis angulares utilizan para rodear los nombres de categoría.
Los corchetes angulares distinguir los nombres de las reglas de sintaxis (también llamados símbolos no terminales) de símbolos terminales que se escriben exactamente como van a ser representados. Una regla BNF definición de un no terminal tiene la forma:

 terminal:: = sequence_of_alternatives que consiste en cadenas de
                 terminales o no terminales separados por el meta-símbolo |

Por ejemplo, la producción BNF para un mini-lenguaje es:
 <programa>:: = programa
                    <declaration_sequence>
                comenzar
                    <statements_sequence>
                final;

Esto demuestra que un programa de mini-lenguaje consiste en la palabra "programa", seguido de la secuencia de la declaración, entonces la palabra clave "begin" y la secuencia de declaraciones, finalmente, la palabra "fin" y un punto y coma.

No hay comentarios:

Publicar un comentario