BNF vs EBNF vs ABNF: ¿cuál elegir?


Quiero crear una sintaxis de lenguaje. He leído un poco sobre estos tres, y realmente no puedo ver nada que uno pueda hacer que otro no pueda. ¿Hay alguna razón para usar uno sobre otro? ¿O es solo una cuestión de preferencia?

Author: Jason Baker, 2010-04-04

5 answers

Tienes que pensar en EBNF y ABNF como extensiones que te ayudan a ser más conciso y expresivo al desarrollar tus gramáticas.

Por ejemplo, piense en un símbolo no terminal opcional, en una gramática BNF lo definiría usando símbolos intermedios como:

A        ::= OPTIONAL OTHER
OPTIONAL ::= opt_part | epsilon

Mientras que con EBNF puede hacerlo directamente usando la sintaxis opcional:

A ::= [opt_part] OTHER

Entonces como no hay manera de expresar precedencia en un BNF usted tiene para usar siempre símbolos intermedios también para opciones anidadas:

BNF
A ::= B C
B ::= a | b | c

EBNF
A ::= (a | b | c) C

Esto es cierto para muchos problemas de sintaxis que se permiten en una gramática EBNF o ABNF, gracias al azúcar sintáctico, pero no con un BNF normal. ABNF extiende EBNF , lo que le permite hacer cosas más complicadas, como especificar cuántas ocurrencias de un símbolo se pueden encontrar juntas (es decir, 4*DIGIT)

Así que elegir un ABNF o un EBNF {[6] } como idioma de elección para su gramática hará que su trabajo sea más fácil, ya que será más expresivo sin llenar su gramática con símbolos inútiles que se generarán de todos modos por su generador de analizador, ¡pero no le importarán!

 26
Author: Jack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-30 02:51:32

Según Wikipedia, los literales de cadena entre comillas dobles de ABNF no distinguen entre mayúsculas y minúsculas, y las coincidencias entre mayúsculas y minúsculas deben definirse como valores ASCII numéricos. Considero que es una desventaja.

El texto literal se especifica mediante el uso de una cadena entre comillas ("). Estas cadenas no distinguen entre mayúsculas y minúsculas y el conjunto de caracteres utilizado es (US-)ASCII. Por lo tanto, la cadena "abc" coincidirá con "abc", "Abc", "aBc", "abC", "ABc", "AbC", "aBC", y "ABC". Para distinguir entre mayúsculas y minúsculas coincidir los caracteres explícitos deben ser definidos: para coincidir con "aBc" la definición será %d97.66.99.

Https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_Form#Terminal_values

Sin embargo, RFC 7405 parece agregar literales de cadena sensibles a mayúsculas y minúsculas a ABNF.

Https://tools.ietf.org/html/rfc7405

 4
Author: trololo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-04-26 09:22:08

El EBNF es la versión extendida/más reciente de BNF, por lo que el problema se vuelve más simple: EBNF vs ABNF. No soy un experto, pero creo que debe depender de un lenguaje, cuya sintaxis desea definir. También hay algunos visualizadores para EBNF ( http://www.google.co.il/search?sourceid=chrome&ie=UTF-8&q=Ebnf-Visualizer ), pero no vio ninguna para ABNF,

 2
Author: Kamarey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-04 16:50:26

Una opción razonable sugeriría ir con EBNF, por la razón de que es un estándar ISO: ISO/IEC 14977 : 1996(E) [pdf]. Como ejemplo, se utiliza para la OMG UML Human-Usable Textual Notation.

 1
Author: Hibou57,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-16 15:02:59

Puede lograr lo que desea utilizando cualquiera de ellos, pero cada uno es conciso y eficaz en la representación de su idioma dependiendo de cuáles son las características que su idioma consiste en.

He leído BNF, EBNF and ABNF from wikipedia and it has described some differences and why EBNF and ABNF came into picture based on BNF

 0
Author: Mahesh Velaga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-04 16:29:53