2010-04-04 6 views
22

Ich möchte eine Sprachsyntax entwickeln. Ich habe ein wenig über diese drei gelesen, und kann wirklich nichts sehen, was man tun kann, dass ein anderer nicht kann. Gibt es einen Grund, einen über den anderen zu benutzen? Oder ist es nur eine Frage der Präferenz?BNF vs EBNF vs ABNF: Welche zu wählen?

Antwort

25

Sie haben über EBNF und ABNF als Erweiterungen zu denken, dass Helfen Sie dabei, bei der Entwicklung Ihrer Grammatiken kurz und bündig zu sein.

Zum Beispiel denkt über ein optionales Nicht-Terminal-Symbol in einem BNF Grammatik Sie es mithilfe von Zwischensymbolen wie definieren würden:

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

während mit EBNF Sie es direkt optional mit tun können Syntax:

A ::= [opt_part] OTHER 

Dann da keinen Vorrang in einem BNF auszudrücken es haben Sie uns e immer auch Zwischensymbole für verschachtelte Auswahl:

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

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

Dies ist für viel Syntax Probleme wahr, die in einer EBNF oder ABNF Grammatik, dank syntaktischem Zucker, aber nicht mit einer normalen BNF erlaubt sind. ABNF erstreckt EBNF, so dass Sie kompliziertere Dinge zu tun, wie die Angabe, wie viele Vorkommen eines Symbols zusammen gefunden werden kann (dh 4*DIGIT)

So ein ABNF oder eine EBNF als Sprache der Wahl Die Wahl Ihrer Grammatik wird Ihre Arbeit erleichtern, da Sie expressiver sein werden, ohne Ihre Grammatik mit nutzlosen Symbolen zu füllen, die sowieso von Ihrem Parser-Generator generiert werden, aber Sie werden sich nicht um sie kümmern!

+2

Bezogen auf 4 * DIGIT: das gleiche kann in EBNF getan werden, um die gleiche Syntax. – Kamarey

+4

Zusätzlich: IETF verwendet ABNF. ABNF ist viel praktischer als EBNF. –

0

Sie können erreichen, was Sie wollen, indem Sie eines von ihnen verwenden, aber jedes ist prägnant und effektiv bei der Darstellung Ihrer Sprache, je nachdem, aus welchen Funktionen Ihre Sprache besteht.

Ich habe BNF lesen, EBNF und ABNF aus Wikipedia und es hat einige Unterschiede beschrieben und warum EBNF und ABNF ins Bild kam, basierend auf BNF

4

Laut Wikipedia sind ABNFs String-Literale mit doppelten Anführungszeichen nicht zwischen Groß- und Kleinschreibung und Groß- und Kleinschreibung müssen als numerische ASCII-Werte definiert werden. Ich halte das für einen Nachteil.

Literaltext wird durch Verwendung einer in Anführungszeichen eingeschlossenen Zeichenfolge angegeben ("). Bei diesen Zeichenfolgen wird die Groß-/Kleinschreibung nicht beachtet, und der verwendete Zeichensatz ist (US-) ASCII. Daher wird die Zeichenfolge "abc" mit "abc", "Abc", "aBc", "abC", "ABc", "AbC", "aBC" und "ABC" übereinstimmen. Für eine Unterscheidung zwischen Groß- und Kleinschreibung müssen die expliziten Zeichen definiert werden: Um "aBc" zu entsprechen, lautet die Definition %d97.66.99.

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

jedoch RFC 7405 scheint case-sensitive Stringliterale zu ABNF hinzuzufügen.

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

Verwandte Themen