2010-04-04 14 views
22

Quiero encontrar una sintaxis de lenguaje. He leído un poco acerca de estos tres, y realmente no puedo ver nada que uno pueda hacer que otro no pueda ver. ¿Hay alguna razón para usar una sobre otra? ¿O es solo una cuestión de preferencia?BNF vs EBNF vs ABNF: ¿cuál elegir?

Respuesta

25

Usted tiene que pensar en EBNF y ABNF como extensiones que te ayuda a ser más conciso y expresivo mientras desarrollas tus gramáticas.

Por ejemplo pensar en un símbolo no terminal opcional, en un BNF la gramática lo defina mediante el uso de símbolos intermedios como:

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

mientras que con EBNF puede hacerlo directamente a través de opcional sintaxis:

A ::= [opt_part] OTHER 

a continuación, ya que no hay manera de expresar preferencia en un BNF tienes que nos e 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 EBNF o ABNF gramática, gracias al azúcar sintáctico, pero no con una normal de BNF. ABNF extiende EBNF, que le permite hacer las cosas más complicadas, como especificando cuántos ocurrencia de un símbolo se puede encontrar en conjunto (es decir 4*DIGIT)

Así que la elección de un ABNF o un EBNF como lengua de La elección de su gramática facilitará su trabajo, ya que será más expresivo sin llenar su gramática con símbolos inútiles que su generador de analizadores generará de todos modos, ¡pero no le importará!

+2

relativa a 4 * dígito: el mismo se puede hacer en EBNF utilizando la misma sintaxis. – Kamarey

+4

Además: IETF usa ABNF. ABNF es mucho más útil que EBNF. –

0

Puede lograr lo que quiere mediante el uso de cualquiera de ellos, pero cada uno es conciso y eficaz en la representación de su idioma en función de las características que comprende su idioma.

He leído BNF, EBNF y ABNF de Wikipedia y se ha descrito algunas diferencias y por qué EBNF y ABNF entraron en la imagen basada en BNF

4

De acuerdo con Wikipedia, los literales de cadena de doble cita de ABNF no distinguen entre mayúsculas y minúsculas, y las concordancias entre mayúsculas y minúsculas se deben definir como valores numéricos ASCII. 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 una coincidencia sensible a mayúsculas y minúsculas, deben definirse los caracteres explícitos: para que coincida 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 añadir cadenas literales entre mayúsculas y minúsculas a ABNF.

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

Cuestiones relacionadas