Voglio creare una sintassi del linguaggio. Ho letto un po 'di questi tre e non riesco davvero a vedere nulla che uno possa fare che un altro non possa fare. C'è qualche ragione per usarne uno rispetto all'altro? O è solo una questione di preferenza?BNF vs EBNF vs ABNF: quale scegliere?
risposta
Dovete pensare EBNF e ABNF come estensioni aiutarvi solo ad essere più concisi ed espressivi mentre sviluppate le vostre grammatiche.
Per esempio pensare a un simbolo non terminale opzionale, in un BNF grammatica definirebbe esso utilizzando simboli intermedi come:
A ::= OPTIONAL OTHER
OPTIONAL ::= opt_part | epsilon
mentre con EBNF è possibile farlo direttamente utilizzando opzionale sintassi:
A ::= [opt_part] OTHER
Poi dal momento che non c'è modo di esprimere la precedenza in un BNF bisogna noi e sempre simboli intermedi anche per le scelte nidificati:
BNF
A ::= B C
B ::= a | b | c
EBNF
A ::= (a | b | c) C
Questo è vero per molti problemi di sintassi che sono consentiti in un grammatica EBNF o ABNF, grazie a zucchero sintattico, ma non con un normale BNF. ABNF estende EBNF, che consente di fare le cose più complicate, come specificare il numero di occorrenza di un simbolo può essere trovato insieme (cioè 4*DIGIT
)
Quindi la scelta di un ABNF o un EBNF come lingua di la scelta della grammatica renderà più facile il tuo lavoro, dal momento che sarai più espressivo senza riempire la tua grammatica con simboli inutili che saranno generati comunque dal tuo generatore di parser, ma non ti preoccuperai di loro!
È possibile ottenere ciò che si desidera utilizzando uno di essi, ma ognuno è conciso ed efficace nel rappresentare la propria lingua in base a quali sono le funzionalità del linguaggio.
Ho letto BNF, EBNF e ABNF da wikipedia e ha descritto alcune differenze e perché EBNF e ABNF è entrato in immagine sulla base di BNF
EBNF è la versione estesa/nuova di BNF, quindi il problema diventa più semplice: EBNF vs ABNF. Non sono un esperto, ma penso che dovrebbe dipendere da un linguaggio, di cui si desidera definire la sintassi. Inoltre ci sono alcuni visualizzatori per EBNF (http://www.google.co.il/search?sourceid=chrome&ie=UTF-8&q=Ebnf-Visualizer), ma non ne ho visto nessuno per ABNF,
Una scelta ragionevole suggerirebbe di andare con EBNF, per il motivo che è uno standard ISO: ISO/IEC 14977 : 1996(E) [pdf]. Ad esempio, è utilizzato per OMG UML Human-Usable Textual Notation.
Secondo Wikipedia, i valori letterali di stringa doppiamente quotati di ABNF sono case-insensitive e le corrispondenze con distinzione tra maiuscole e minuscole devono essere definite come valori ASCII numerici. Lo considero uno svantaggio.
Il testo letterale viene specificato mediante l'uso di una stringa racchiusa tra virgolette (
"
). Queste stringhe sono case-insensitive e il set di caratteri utilizzato è (US-) ASCII. Pertanto la stringa "abc" corrisponderà a "abc", "Abc", "aBc", "abC", "ABc", "AbC", "aBC" e "ABC". Per una corrispondenza con distinzione tra maiuscole e minuscole è necessario definire i caratteri espliciti: per corrispondere a "aBc" la definizione sarà%d97.66.99
.
https://en.wikipedia.org/wiki/Augmented_Backus%E2%80%93Naur_Form#Terminal_values
Tuttavia, RFC 7405 sembra aggiungere stringhe letterali case-sensitive per ABNF.
- 1. Multithreading vs. Multiistanza - Quale scegliere?
- 2. canvas vs. webGL vs. CSS 3d -> quale scegliere?
- 3. Convalida Javascript vs ASP.NET, quale scegliere?
- 4. MQTT vs. XMPP Quale dovrei scegliere?
- 5. HTML5 vs Native App: quale scegliere ??
- 6. WPF Quale IDE scegliere?
- 7. ListFragment vs ListActivity: quale utilizzare?
- 8. Liquibase vs Flyway quale usare?
- 9. Java's Scanner vs String.split() vs StringTokenizer; quale dovrei usare?
- 10. MySQL vs Firebird vs SQLite
- 11. Come scegliere quale codice inserire in una View vs. un ViewController?
- 12. Quale pacchetto FRP scegliere?
- 13. Quale ChoiceBox-Event scegliere?
- 14. Serializzazione Java vs JSON vs XML
- 15. Mathematica: non valutata vs Defer vs attesa vs HoldForm vs HoldAllComplete vs etc etc
- 16. pyparsing - carica ABNF?
- 17. Esistono strumenti per la conversione tra ANTLR e altre forme di BNF?
- 18. ID vs UniqueID vs ClientID vs UniqueClientID vs StaticClientID?
- 19. Quale è meglio? private static vs privato
- 20. Composizione ereditaria privata VS: quando usare quale?
- 21. PHP vs OO PHP - Quale da usare?
- 22. CA1500 vs. SA1309 - Quale si vince?
- 23. Persistente vs non persistente - Quale dovrei usare?
- 24. print() vs sys.stdout.write(): quale e perché?
- 25. HDFS vs GridFS: quando usare quale?
- 26. SpinWait vs Sleep waiting. Quale usare?
- 27. SpiderMonkey vs JavaScriptCore vs?
- 28. manage.windowsazure.com vs. portal.azure.com
- 29. Hosting PowerShell: PowerShell vs Runspace vs RunspacePool vs Pipeline
- 30. Node-PerfectAPI vs Restify.js vs ExpressJS vs Node-APIServer
Rispetto al 4 * DIGIT: lo stesso può essere fatto in EBNF utilizzando la stessa sintassi. – Kamarey
Inoltre: IETF utilizza ABNF. ABNF è molto più pratico di EBNF. –