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
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!
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
Die EBNF ist die erweiterte/neuere Version von BNF, daher wird das Problem einfacher: EBNF vs ABNF. Ich bin kein Experte, denke aber, dass es von einer Sprache abhängen sollte, deren Syntax du definieren willst. Es gibt auch einige Visualizer für EBNF (http://www.google.co.il/search?sourceid=chrome&ie=UTF-8&q=Ebnf-Visualizer), aber keine für ABNF,
Eine vernünftige Wahl würde vorschlagen, mit EBNF zu gehen, denn es ist ein ISO-Standard: ISO/IEC 14977 : 1996(E) [pdf]. Als Beispiel wird es für die OMG UML Human-Usable Textual Notation verwendet.
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.
- 1. HTML5 vs Native App: Welche zu wählen ??
- 2. Javascript vs ASP.NET Validierung, welche man wählen?
- 3. Erweiterte BNF BNF Übersetzung
- 4. Schienen collection_select vs wählen
- 5. Sind Regexs in BNF- und EBNF-Notationen erlaubt?
- 6. Ich habe Probleme mit der Übersetzung von EBNF nach BNF
- 7. android vs iOS, die wählen
- 8. body.scrollTop vs documentElement.scrollTop vs window.pagYOffset vs window.scrollY
- 9. PHP vs OO PHP - Welche zu verwenden?
- 10. GCMRegistrar vs GoogleCloudMessaging welche zu verwenden?
- 11. jQuery Selektoren: Multiselect vs wählen
- 12. Procmail vs. Maildrop - welche verwenden?
- 13. Opa vs Dart vs Haxe vs Coffee
- 14. Klasse vs Paket vs Modul vs Komponente vs Container vs Service vs Plattform in Java Welt
- 15. Angular.js vs Knockout.js vs Backbone.js
- 16. Exec vs ExecWait vs ExecShell vs nsExec :: Exec vs nsExec :: ExecToLog vs nsExec :: ExecToStack vs ExecDos vs ExeCmd
- 17. getBBox() vs getBoundingClientRect() vs getClientRects()
- 18. pyparsing - laden ABNF?
- 19. Wählen Sie * vs Alle Spaltennamen auswählen
- 20. Redis vs Memcahced vs Hazelcast
- 21. Matlab vs Aforge vs OpenCV
- 22. Was ist besser: Wählen Sie vs Threads?
- 23. SQL Server: Wählen Sie in vs oder?
- 24. UIViewController vs. UIView - welche sollte Subviews erstellen?
- 25. Dundas vs ComponentArt welche ist besser
- 26. Winfor vs WPF vs WinRTmarketshare
- 27. Node-PerfectAPI vs Restify.js vs ExpressJS vs Node-APIServer
- 28. EBNF zu Scala Parser combinator
- 29. Wählen Sie Anzahl (*) vs Wählen Sie Anzahl (ID) vs Anzahl wählen (1). Sind diese in der Tat gleichwertig?
- 30. Enum ('Ja', 'Nein') vs Tinyint - welche zu verwenden?
Bezogen auf 4 * DIGIT: das gleiche kann in EBNF getan werden, um die gleiche Syntax. – Kamarey
Zusätzlich: IETF verwendet ABNF. ABNF ist viel praktischer als EBNF. –