En informática , la forma Backus – Naur [ pronunciación? ] o la forma normal de Backus ( BNF ) es una notación de metasintaxis para gramáticas libres de contexto , que se utiliza a menudo para describir la sintaxis de los lenguajes utilizados en informática, como lenguajes de programación de ordenadores , formatos de documentos , conjuntos de instrucciones y protocolos de comunicación . Se aplican siempre que se necesitan descripciones exactas de los idiomas: por ejemplo, en las especificaciones oficiales del idioma, en los manuales y en los libros de texto sobre teoría de los lenguajes de programación.
Se utilizan muchas extensiones y variantes de la notación Backus-Naur original; algunos están exactamente definidos, incluida la forma Backus-Naur extendida (EBNF) y la forma Backus-Naur aumentada (ABNF).
Historia
La idea de describir la estructura del lenguaje usando reglas de reescritura se remonta al menos al trabajo de Pāṇini , un antiguo gramático sánscrito indio y un venerado estudioso del hinduismo que vivió en algún momento entre los siglos VI y IV a . C. [1] [2] Su notación para describir la estructura de la palabra sánscrita es equivalente en poder a la de Backus y tiene muchas propiedades similares.
En la sociedad occidental, la gramática se consideró durante mucho tiempo un tema de enseñanza, más que un estudio científico; las descripciones eran informales y estaban dirigidas al uso práctico. En la primera mitad del siglo XX, lingüistas como Leonard Bloomfield y Zellig Harris comenzaron a intentar formalizar la descripción del lenguaje, incluida la estructura de las frases.
Mientras tanto, las reglas de reescritura de cadenas como sistemas lógicos formales fueron introducidas y estudiadas por matemáticos como Axel Thue (en 1914), Emil Post (1920-1940) y Alan Turing (1936). Noam Chomsky , que enseña lingüística a estudiantes de teoría de la información en el MIT , combinó lingüística y matemáticas tomando lo que es esencialmente el formalismo de Thue como base para la descripción de la sintaxis del lenguaje natural . También introdujo una clara distinción entre las reglas generativas (las de las gramáticas libres de contexto ) y las reglas de transformación (1956). [3] [4]
John Backus , un diseñador de lenguajes de programación en IBM , propuso un metalenguaje de "fórmulas metalingüísticas" [5] [6] [7] para describir la sintaxis del nuevo lenguaje de programación IAL, conocido hoy como ALGOL 58 (1959). Su notación se utilizó por primera vez en el informe ALGOL 60.
BNF es una notación para las gramáticas libres de contexto de Chomsky. Backus estaba familiarizado con el trabajo de Chomsky. [8]
Según lo propuesto por Backus, la fórmula definió "clases" cuyos nombres están encerrados entre corchetes angulares. Por ejemplo
,. Cada uno de estos nombres denota una clase de símbolos básicos. [5]
Un mayor desarrollo de ALGOL condujo a ALGOL 60 . En el informe del comité de 1963, Peter Naur llamó a la notación de Backus forma normal de Backus . Donald Knuth argumentó que BNF debería leerse más bien como la forma Backus-Naur , ya que "no es una forma normal en el sentido convencional", [9] a diferencia de, por ejemplo, la forma normal de Chomsky . El nombre forma Pāṇini Backus también se sugirió una vez en vista del hecho de que la forma normal de expansión Backus puede no ser precisa, y que Pāṇini había desarrollado independientemente una notación similar antes. [10]
El BNF es descrito por Peter Naur en el informe ALGOL 60 como fórmula metalingüística : [11]
Las secuencias de caracteres entre corchetes <> representan variables metalingüísticas cuyos valores son secuencias de símbolos. Las marcas ":: =" y "|" (este último con el significado de "o") son conectivos metalingüísticos. Cualquier marca en una fórmula, que no sea una variable o un conectivo, se denota a sí misma. La yuxtaposición de marcas o variables en una fórmula significa yuxtaposición de la secuencia denotada.
Otro ejemplo del informe ALGOL 60 ilustra una gran diferencia entre el metalenguaje BNF y una gramática libre de contexto de Chomsky. Las variables metalingüísticas no requieren una regla que defina su formación. Su formación puede describirse simplemente en lenguaje natural dentro de los corchetes <>. La siguiente especificación de comentarios de la sección 2.3 del informe ALGOL 60, ejemplifica cómo funciona esto:
Con el fin de incluir texto entre los símbolos de un programa, se cumplen las siguientes convenciones de "comentarios":
La secuencia de símbolos básicos: es equivalente a ; comentario ; ; comenzar comentario ; empezar end o 'si no'> final La equivalencia aquí significa que cualquiera de las tres estructuras mostradas en la columna de la izquierda puede ser reemplazada, en cualquier ocurrencia fuera de las cadenas, por el símbolo mostrado en la misma línea en la columna de la derecha sin ningún efecto sobre la acción del programa.
Naur cambió dos de los símbolos de Backus a caracteres comúnmente disponibles. El ::=
símbolo originalmente era a :≡
. El |
símbolo era originalmente la palabra " o " (con una barra encima). [6] : 14 [se necesita aclaración ] Trabajando para IBM, Backus habría tenido un acuerdo de no divulgación y no podría haber hablado sobre su fuente si procediera de un proyecto propietario de IBM. [ cita requerida ]
BNF es muy similar a las ecuaciones de álgebra booleana de forma canónica que se utilizan y se utilizaban en ese momento en el diseño de circuitos lógicos. Backus fue un matemático y el diseñador del lenguaje de programación FORTRAN. Los estudios de álgebra booleana suelen formar parte de las matemáticas. Lo que sí sabemos es que ni Backus ni Naur describieron los nombres incluidos como no terminales. La terminología de Chomsky no se usó originalmente para describir BNF. Naur luego los describió como clases en los materiales del curso ALGOL. [5] En el informe ALGOL 60 se denominaron variables metalingüísticas. Cualquier otra cosa que no sean los metasímbolos , y los nombres de clase incluidos son símbolos del lenguaje que se está definiendo. Los metasímbolos deben interpretarse como "se define como". Se utiliza para separar definiciones alternativas y se interpreta como "o". Los metasímbolos son delimitadores que encierran un nombre de clase. BNF se describe como un metalenguaje para hablar de ALGOL por Peter Naur y Saul Rosen . [5]< >
::=
|
< >
::=
|
< >
En 1947, Saul Rosen se involucró en las actividades de la incipiente Asociación de Maquinaria de Computación , primero en el comité de idiomas que se convirtió en el grupo IAL y finalmente condujo a ALGOL. Fue el primer editor gerente de Comunicaciones de la ACM. [se necesita aclaración ] Lo que sí sabemos es que BNF se utilizó por primera vez como metalenguaje para hablar sobre el lenguaje ALGOL en el informe ALGOL 60. Así es como se explica en el material del curso de programación ALGOL desarrollado por Peter Naur en 1962. [5] Los primeros manuales ALGOL de IBM, Honeywell, Burroughs y Digital Equipment Corporation siguieron al informe ALGOL 60 usándolo como metalenguaje. Saul Rosen en su libro [12] describe BNF como un metalenguaje para hablar de ALGOL. Un ejemplo de su uso como metalenguaje sería definir una expresión aritmética:
< expr > :: = < término > | < expr > < addop > < término >
El primer símbolo de una alternativa puede ser la clase que se está definiendo, teniendo la repetición, como explica Naur, la función de especificar que la secuencia alternativa puede comenzar de forma recursiva con una alternativa anterior y puede repetirse cualquier número de veces. [5] Por ejemplo, lo anterior
se define como a
seguido de cualquier número de
.
En algunos metalenguajes posteriores, como el META II de Schorre , la construcción de repetición recursiva BNF se reemplaza por un operador de secuencia y los símbolos del idioma de destino se definen mediante cadenas entre comillas. Se quitaron los corchetes <
y >
. (
)
Se agregaron paréntesis para la agrupación matemática. La
regla aparecería en META II como
EXPR = TERM $ ('+' TERM .OUT ('AÑADIR') | '-' TERM .OUT ('SUB'));
Estos cambios permitieron a META II y sus lenguajes de programación derivados definir y extender su propio metalenguaje, a costa de la capacidad de usar una descripción de lenguaje natural, una variable metalingüística, una descripción de constructo de lenguaje. Muchos metalenguajes derivados se inspiraron en BNF. [ cita requerida ] Ver META II , TREE-META y Metacompiler .
Una clase BNF describe la formación de un constructo de lenguaje, con la formación definida como un patrón o la acción de formar el patrón. El nombre de clase expr se describe en un lenguaje natural como
seguido de una secuencia
. Una clase es una abstracción; podemos hablar de ello independientemente de su formación. Podemos hablar de término, independientemente de su definición, como suma o resta en expr. Podemos hablar de que un término es un tipo de datos específico y cómo se evaluará un expr con combinaciones específicas de tipos de datos. O incluso reordenar una expresión para agrupar tipos de datos y resultados de evaluación de tipos mixtos. El suplemento de lenguaje natural proporcionó detalles específicos de la semántica de la clase de lenguaje que utilizará una implementación de compilador y un programador que escriba un programa ALGOL. La descripción en lenguaje natural también complementó aún más la sintaxis. La regla de los enteros es un buen ejemplo de metalenguaje y natural utilizado para describir la sintaxis:
< entero > :: = < dígito > | < entero > < dígito >
No hay detalles sobre los espacios en blanco en lo anterior. Por lo que dice la regla, podríamos tener un espacio entre los dígitos. En el lenguaje natural complementamos el metalenguaje BNF explicando que la secuencia de dígitos no puede tener espacios en blanco entre los dígitos. El inglés es solo uno de los posibles idiomas naturales. Las traducciones de los informes ALGOL estaban disponibles en muchos idiomas naturales.
El origen de BNF no es tan importante como su impacto en el desarrollo del lenguaje de programación. [ cita requerida ] Durante el período inmediatamente posterior a la publicación del informe ALGOL 60, el BNF fue la base de muchos sistemas compiladores-compiladores .
Algunos, como "Un compilador dirigido por sintaxis para ALGOL 60" desarrollado por Edgar T. Irons y "Un sistema de construcción de compiladores" desarrollado por Brooker y Morris, utilizaron directamente BNF. Otros, como Schorre Metacompilers , lo convirtieron en un lenguaje de programación con solo unos pocos cambios.
se convirtieron en identificadores de símbolos, eliminando el <,> adjunto y utilizando cadenas entre comillas para los símbolos del idioma de destino. La agrupación similar a la aritmética proporcionó una simplificación que eliminó el uso de clases donde la agrupación era su único valor. La regla de expresión aritmética META II muestra el uso de agrupaciones. Las expresiones de salida colocadas en una regla META II se utilizan para generar códigos y etiquetas en un lenguaje ensamblador. Las reglas en META II son equivalentes a las definiciones de clase en BNF. La utilidad de Unix yacc se basa en BNF con una producción de código similar a META II. yacc se usa más comúnmente como generador de analizador sintáctico y sus raíces son obviamente BNF.
Actualmente, BNF es uno de los lenguajes informáticos más antiguos que todavía se utilizan. [ cita requerida ]
Introducción
Una especificación BNF es un conjunto de reglas de derivación, escritas como
< símbolo > :: = __expresión__
donde < símbolo > [5] es un no terminal , y la __expresión__ consta de una o más secuencias de símbolos; más secuencias están separadas por la barra vertical "|", lo que indica una elección , siendo el conjunto una posible sustitución del símbolo de la izquierda. Los símbolos que nunca aparecen en el lado izquierdo son terminales . Por otro lado, los símbolos que aparecen en el lado izquierdo son no terminales y siempre están encerrados entre el par <>. [5]
El ":: =" significa que el símbolo de la izquierda debe reemplazarse con la expresión de la derecha.
Ejemplo
Como ejemplo, considere este posible BNF para una dirección postal de EE. UU .:
< dirección-postal > :: = < parte-nombre > < dirección-calle > < parte-zip > < parte-nombre > :: = < parte-personal > < apellido > -sufijo-opt > < EOL > | < parte-personal > < parte-nombre > < parte-personal > :: = < inicial > "." | < nombre de pila > < dirección-calle > :: = -casa > < nombre-calle > < opt-apt-num > < EOL > < zip-part > :: = < town-name > "," < state-code > < ZIP-code > < EOL >< opt-sufijo-parte > :: = "Sr." | "Jr." | < número-romano > | "" < opt-apt-num > :: = < apt-num > | ""
Esto se traduce al inglés como:
- Una dirección postal consta de una parte de nombre, seguida de una parte de dirección de calle , seguida de una parte de código postal .
- Una parte de nombre consta de: una parte personal seguida de un apellido seguido de un sufijo opcional (Jr., Sr. o número dinástico) y un final de línea , o una parte personal seguida de una parte de nombre ( esta regla ilustra el uso de la recursividad en los BNF, cubriendo el caso de personas que utilizan varios nombres, segundos nombres e iniciales).
- Una parte personal consta de un nombre o una inicial seguida de un punto.
- Una dirección de calle consta de un número de casa, seguido de un nombre de calle, seguido de un especificador de apartamento opcional , seguido de un final de línea.
- Una parte postal consta de un nombre de ciudad , seguido de una coma, seguido de un código de estado , seguido de un código postal seguido de un final de línea.
- Una parte de sufijo opcional consta de un sufijo, como "Sr.", "Jr." o un número romano , o una cadena vacía (es decir, nada).
- Un opt-apt-num consiste en un número de apartamento o una cadena vacía (es decir, nada).
Tenga en cuenta que muchas cosas (como el formato de un nombre, especificador de apartamento, código postal y número romano) se dejan sin especificar aquí. Si es necesario, pueden describirse utilizando reglas BNF adicionales.
Más ejemplos
La sintaxis de BNF en sí puede representarse con un BNF como el siguiente:
< sintaxis > :: = < regla > | < regla > < sintaxis > < regla > :: = < opt-espacio en blanco > "<" < nombre-regla > ">" < opt-espacio en blanco > " :: = " < opt-espacio en blanco > < expresión > línea > < opt-espacio en blanco > :: = "" < opt-espacio en blanco > | "" < expresión > :: = < lista > | < lista > < opt-espacio en blanco > "|" < opt-espacio en blanco > < expresión > línea > :: = < opt-espacio en blanco > < EOL > | línea > línea > < lista > :: = < término > | < término > < opt-espacio en blanco > < lista > < término > :: = < literal > | "<" < nombre-regla > ">" < literal > :: = '"' < texto1 > '"' | "'" < texto2 > "'" < texto1 > :: = "" | < carácter1 > < texto1 > < texto2 > :: = '' | < carácter2 > < texto2 > < carácter > :: = < letra > | < dígito > | < símbolo > < letra > :: = "A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "Yo" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "yo" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z" < dígito > :: = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" < símbolo > :: = "|" | "" | "!" | "#" | "$" | "%" | "&" | "(" | ")" | "*" | "+" | "," | "-" | "." | "/" | ":" | ";" | ">" | "=" | "<" | "?" | "@" | "[" | "\" | "]" | "^" | "_" | "` "| "{" | "}" | "~" < carácter1 > :: = < carácter > | "'" < carácter2 > :: = < carácter > | '"' < nombre-regla > :: = < letra > | < nombre-regla > < carácter-regla > < carácter-regla > :: = < letra > | < dígito > |" - "
Tenga en cuenta que "" es la cadena vacía .
El BNF original no usó comillas como se muestra en la
regla. Esto supone que no se necesitan espacios en blanco para una interpretación adecuada de la regla.
representa el especificador de fin de línea apropiado (en ASCII , retorno de carro, avance de línea o ambos, según el sistema operativo ).
y
deben sustituirse por el nombre / etiqueta de una regla declarada o el texto literal, respectivamente.
En el ejemplo anterior de la dirección postal de EE. UU., La cotización en bloque completa es una sintaxis. Cada línea o agrupación ininterrumpida de líneas es una regla; por ejemplo, una regla comienza con
. La otra parte de esa regla (aparte de un final de línea) es una expresión, que consta de dos listas separadas por una barra vertical |
. Estas dos listas constan de algunos términos (tres términos y dos términos, respectivamente). Cada término de esta regla en particular es un nombre de regla.
Variantes
Existen muchas variantes y extensiones de BNF, generalmente por motivos de simplicidad y concisión, o para adaptarlo a una aplicación específica. Una característica común de muchas variantes es el uso de operadores de repetición de expresiones regulares como *
y +
. La forma extendida Backus-Naur (EBNF) es común.
Otra extensión común es el uso de corchetes alrededor de elementos opcionales. A pesar de que no está presente en el informe original ALGOL 60 (en vez introducido unos años más tarde en IBM 's PL / I definición), la notación es ahora universalmente reconocida.
El formulario Augmented Backus-Naur (ABNF) y el formulario Routing Backus-Naur (RBNF) [13] son extensiones que se utilizan comúnmente para describir los protocolos de Internet Engineering Task Force (IETF) .
Las gramáticas de expresión analítica se basan en el BNF y las notaciones de expresión regular para formar una clase alternativa de gramática formal , que es esencialmente de carácter analítico en lugar de generativo .
Muchas especificaciones BNF que se encuentran en línea hoy en día están destinadas a ser legibles por humanos y no son formales. Estos suelen incluir muchas de las siguientes reglas de sintaxis y extensiones:
- Los elementos opcionales entre corchetes:
[
.] - Los elementos que existen 0 veces o más se encierran entre corchetes o se les añade un asterisco (
*
) como sufijo
o::= { }
respectivamente.::= * - Artículos 1 o más veces existentes se sufijo con un símbolo de adición (plus),
+
. - Los terminales pueden aparecer en negrita en lugar de cursiva y los no terminales en texto sin formato en lugar de corchetes angulares.
- Cuando los elementos están agrupados, se incluyen entre paréntesis simples.
Software que utiliza BNF
- ANTLR , otro generador de analizador escrito en Java
- Qlik Sense, una herramienta de BI, utiliza una variante de BNF para la creación de scripts
- Convertidor BNF (BNFC [14] ), que opera en una variante llamada "forma etiquetada Backus-Naur" (LBNF). En esta variante, a cada producción para un no terminal dado se le asigna una etiqueta, que puede usarse como un constructor de un tipo de datos algebraicos que represente ese no terminal. El convertidor es capaz de producir tipos y analizadores de sintaxis abstracta en varios lenguajes, incluidos Haskell y Java.
- Coco / R , generador de compilador que acepta una gramática atribuida en EBNF
- Kit de herramientas de reingeniería de software DMS , sistema de análisis y transformación de programas para lenguajes arbitrarios
- Analizador GOLD BNF
- GNU bison , versión GNU de yacc
- Analizador RPA BNF. [15] Análisis de demostración en línea (PHP): JavaScript, XML
- Sistema XACT X4MR, [16] un sistema experto basado en reglas para la traducción de lenguajes de programación
- XPL Analyzer, una herramienta que acepta BNF simplificado para un idioma y produce un analizador para ese idioma en XPL; puede integrarse en el programa SKELETON suministrado, con el que se puede depurar el lenguaje [17] (un programa contribuido por SHARE , que fue precedido por A Compiler Generator , ISBN 978-0-13-155077-3 )
- Yacc , generador de analizador sintáctico (más comúnmente utilizado con el preprocesador Lex )
- bnfparser 2 , [18] una utilidad de verificación de sintaxis universal
- bnf2xml, [19] Entrada de marcado con etiquetas XML que utilizan coincidencia BNF avanzada.
- JavaCC, [20] Java Compiler Compiler tm (JavaCC tm) - El generador de analizador de Java.
- Herramientas de análisis de Racket, análisis de estilo lex y yacc (edición Beautiful Racket)
- Belr , un generador de analizador escrito en C ++ 11. Utiliza ABNF .
Ver también
- Lenguaje de descripción del compilador (CDL)
- Diagrama de sintaxis - diagrama de ferrocarril
- Formulario traslacional Backus – Naur (TBNF)
- Notación de sintaxis de Wirth : una alternativa a BNF de 1977
- Gramática de cláusulas definidas : una alternativa más expresiva a BNF utilizada en Prolog
- Gramática de Van Wijngaarden : se usa con preferencia a BNF para definir Algol68
- Meta-II : una de las primeras herramientas de escritura y notación del compilador
Referencias
- ^ "Biografía de Panini" . Escuela de Matemáticas y Estadística, Universidad de St Andrews, Escocia . Consultado el 22 de marzo de 2014 .
- ^ Ingerman, Peter Zilahy (marzo de 1967). " " Forma Pāṇini-Backus "Sugerida". Comunicaciones de la ACM . Asociación para Maquinaria de Computación. 10 (3): 137. doi : 10.1145 / 363162.363165 . S2CID 52817672 .Ingerman sugiere que la forma normal de Backus sea renombrada a la forma Pāṇini -Backus, para dar el debido crédito a Pāṇini como el primer inventor independiente.
- ^ Chomsky, Noam (1956). "Tres modelos para la descripción del lenguaje" (PDF) . Transacciones IRE sobre teoría de la información . 2 (3): 113–24. doi : 10.1109 / TIT.1956.1056813 . Archivado desde el original (PDF) el 19 de septiembre de 2010.
- ^ Chomsky, Noam (1957). Estructuras sintácticas . La Haya: Mouton.
- ^ a b c d e f g h El significado de la fórmula sintáctica puede explicarse aún más diciendo que las palabras encerradas entre corchetes
< >
, como
, denotan clases cuyos miembros son secuencias de símbolos básicos. Las designaciones de clase de este tipo se encuentran en cualquier descripción de un idioma. Para describir los lenguajes naturales ordinarios se utilizan designaciones como palabra, verbo, sustantivo. Peter Naur (1961). "CURSO DE PROGRAMACIÓN DE ALGOL" . pag. 5, nota 1 . Consultado el 26 de marzo de 2015 . - ^ a b Backus, JW (1959). "La sintaxis y semántica del lenguaje algebraico internacional propuesto de la Conferencia ACM-GAMM de Zurich" . Actas de la Conferencia Internacional sobre Procesamiento de Información . UNESCO. págs. 125-132.
- ^ Farrell, James A. (agosto de 1995). "Conceptos básicos del compilador: formulario extendido Backus Naur" . Archivado desde el original el 5 de junio de 2011 . Consultado el 11 de mayo de 2011 .
- ^ Fulton, III, Scott M. (20 de marzo de 2007). "John W. Backus (1924 - 2007)" . BetaNews. Inc . Consultado el 3 de junio de 2014 .
- ^ Knuth, Donald E. (1964). "Forma normal de Backus frente a forma de Backus Naur". Comunicaciones de la ACM . 7 (12): 735–736. doi : 10.1145 / 355588.365140 . S2CID 47537431 .
- ^ Ingerman, PZ (1967). " " Pāṇini forma de Backus "sugirió". Comunicaciones de la ACM . 10 (3): 137. doi : 10.1145 / 363162.363165 . S2CID 52817672 .
- ^ Sección revisada del informe ALGOL 60. 1.1. "ALGOL 60" . Consultado el 18 de abril de 2015 .
- ^ Saul Rosen (enero de 1967). Sistemas y lenguajes de programación . Serie de Ciencias de la Computación de McGraw Hill. Nueva York / NY: McGraw Hill. ISBN 978-0070537088.
- ^ RBNF .
- ^ "BNFC", tecnología del lenguaje , SE : Chalmers
- ^ "Demostración en línea", RPatk
- ^ "Tools", Act world , archivado desde el original el 29 de enero de 2013
- ^ Si el procesador de destino es System / 360, o relacionado, incluso hasta z / System, y el idioma de destino es similar a PL / I (o, de hecho, XPL), entonces los "emisores" de código requeridos pueden adaptarse de XPL "emisores" para System / 360.
- ^ "BNF parser²", Source forge (proyecto)
- ^ bnf2xml
- ^ "JavaCC" . Archivado desde el original el 8 de junio de 2013 . Consultado el 25 de septiembre de 2013 .
- Este artículo se basa en material extraído del Diccionario gratuito de informática en línea antes del 1 de noviembre de 2008 e incorporado bajo los términos de "renovación de licencias" de la GFDL , versión 1.3 o posterior.
enlaces externos
- Garshol, Lars Marius, BNF y EBNF: ¿Qué son y cómo funcionan? , NO : Priv.
- RFC 5234 - BNF aumentado para especificaciones de sintaxis: ABNF.
- RFC 5511 - Enrutamiento BNF: una sintaxis utilizada en varias especificaciones de protocolo.
- ISO / IEC 14977: 1996 (E) Tecnología de la información - Metalenguaje sintáctico - BNF extendido , disponible en "Disponible al público", Normas , ISO o de Kuhn, Marcus, Iso 14977 (PDF) , Reino Unido : CAM (a este último le falta la portada, pero por lo demás es mucho más limpio)
Gramáticas del lenguaje
- Bernhard, Algol-60 BNF , DE : LRZ München, el BNF original.
- "Gramáticas BNF para SQL-92, SQL-99 y SQL-2003", Savage , AU : Net, gramáticas BNF disponibles gratuitamente para SQL .
- "Web Club BNF", la investigación DB , CH : UNIGE, Archivado desde el original en 2007-01-24 , recuperado 2007-01-25, gramáticas BNF disponibles gratuitamente para SQL, Ada , Java .
- "Gramáticas del lenguaje de programación libre para la construcción de compiladores", Código fuente , El país libre, Libremente disponible BNF / EBNF gramáticas para C / C ++, Pascal , COBOL , Ada 95 , PL / I .
- "Archivos BNF relacionados con el estándar STEP", motor Exp ( SVN ), Source forge, archivado desde el original el 2012-12-25. Incluye las partes 11, 14 y 21 de la norma ISO 10303 (STEP).