Ci sono strumenti per convertire la sintassi della grammatica ANTLR da e verso altre sintassi BNF? Esistono diverse forme Backus-Naur Form (BNF, EBNF, ABNF, W3C-BNF, XBNF ...) con specifica, ad es. see this list. La sintassi della grammatica ANTLR sembra essere solo described by examples. So che i file di grammatica ANTLR contengono più della specifica di una sintassi senza contesto, ma dovresti essere in grado di convertire almeno il sottoinsieme comune - qualcuno ha ancora fatto automaticamente?Esistono strumenti per la conversione tra ANTLR e altre forme di BNF?
risposta
Jakob ha scritto:
La sintassi della grammatica ANTLR sembra solo essere descritto da esempi.
ANTLR (v3) è scritto "nelle sue stesse parole" (come Terence Parr si è messo di esso) in questa grammatica:
http://www.antlr.org/grammar/ANTLR/ANTLRv3.g
Jakob ha scritto:
ma si dovrebbe essere in grado di convertire almeno la c sottoinsieme ommon: qualcuno ha ancora fatto automaticamente?
Non che io sappia. E se esiste, non ho mai visto questo strumento in discussione sulla mailing list ANTLR che leggo regolarmente.
Si noti inoltre che molte varianti di BNF consentono le regole left-recursive, qualcosa che un generatore di parser LL come ANTLR non è in grado di gestire. Le regole ricorsive di sinistra possono ovviamente essere rielaborate dallo strumento, ma ciò potrebbe essere piuttosto complicato e probabilmente si tradurrà in una grammatica molto meno "leggibile" di quella che si otterrebbe rispetto a farlo manualmente.
Come per la conversione di grammatiche ANTLR in forma simile a BNF, credo sia più facile, anche se solo con le grammatiche più banali. Non appena i vari tipi di predicati vengono inseriti in una grammatica ANTLR, la conversione potrebbe essere di nuovo complicata.
# Grammar Syntax
| | BNF | ISO EBNF | ABNF | ANTLR |
|:-----------------------------:|:-----------------------------:|:-----------------------------:|:-----------------------------:|:-----------------------------:|
| rule definition | `<name> ::= ...` | `name = ... ;` | `name = ...` | `name : ... ;` |
| terminal items | `...` | `'...'` or `"..."` | integer or `"..."` | `'...'` |
| non-terminal items | `<...>` | `...` | `...` or `<...>` | `...` |
| concatenation | (space) | `,` | (space) | (space) |
| choice | `|` | `|` | `/` | `|` |
| optional | requires choice syntax[^1] | `[...]` | `*1...` or `[...]` | `...?` |
| 0 or more repititions | requires choice syntax[^2] | `{...}` | `*...` | `...*` |
| 1 or more repititions | requires choice syntax[^3] | `{...}-` | `1*...` | `...+` |
| n repititions | | `n*...` | `n*n...` | |
| n to m repititions | | | `n*m...` | |
| grouping | | `(...)` | `(...)` | `(...)` |
| comment | | `(*...*)` | `;...` | `// ...` or `/* ... */` |
[^1]: `optionalb ::= a b c d | a c d`
[^2]: `list ::= | listitem list`
[^3]: `list ::= listitem | listitem list`
- 1. Esistono strumenti per monitorare la risposta HTTP?
- 2. Esistono strumenti per integrare Java e C++?
- 3. Quali strumenti di autotest esistono per Clojure
- 4. Esistono buoni strumenti per la pseudo localizzazione di iOS?
- 5. C# winform: accesso alle proprietà pubbliche da altre forme e differenze tra proprietà statiche e pubbliche
- 6. Quali strumenti di generatore di parser basati sulla grammatica esistono per il rubino?
- 7. Esistono regole rigide per la conversione da JSON a XML e viceversa?
- 8. Esistono strumenti per aggiornare automaticamente Javadoc?
- 9. Esistono strumenti per semplificare la logica "se" complessa?
- 10. Esistono strumenti per generare un file WADL?
- 11. Esistono strumenti o progetti per generare file AZW?
- 12. Esistono strumenti per convertire VML legacy in SVG?
- 13. Quali strumenti XSLT 2.0 esistono?
- 14. Esistono strumenti di differenziazione/unione "intelligenti"/contestuali?
- 15. Esistono strumenti di visualizzazione del codice PHP?
- 16. Esistono utili strumenti di analisi statica per i database?
- 17. Lexer/parser per generare il codice Scala dalla grammatica BNF
- 18. Esistono strumenti di DRYer con codice?
- 19. Quali sono le differenze pratiche tra forme speciali e macro?
- 20. Esistono strumenti per visualizzare gli oggetti utilizzati in un programma?
- 21. Esistono strumenti per definire l'API Rest nel documento?
- 22. Esistono altre implementazioni .Net diverse da Microsoft e Mono?
- 23. Quali strumenti esistono per la creazione di pacchetti Debian per scopi di implementazione?
- 24. Conversione forme basate Tile 2D poligoni semplificate
- 25. Esistono altre alternative alla registrazione log4net?
- 26. Esistono strumenti di gestione del repository di pacchetti R?
- 27. Conversione di emoji Java in xml: quali librerie esistono?
- 28. Esistono collegamenti tra Haskell e LINQ?
- 29. Esistono strumenti per la creazione di app GUI Java swing che non sono specifici per IDE?
- 30. Notazione BNF di T-SQL
Grazie, la grammatica ANTLR scritta in ANTLR era una cosa che stavo cercando. Per quanto comprendo ANTLR * puoi * annotare grammatiche ricorsive a sinistra, ma devi quindi rifattorizzarle a mano. Un convertitore da altre forme BNF e ANTLR ridurrebbe almeno la necessità di adottare manualmente le differenze di punteggiatura e altri aspetti minori delle varianti di sintassi BNF. – Jakob
Sembra che ANTLR non sia in grado di gestire i caratteri Unicode sopra il piano multilingue di base: ESC: '\\' (... | 'u' XDIGIT XDIGIT XDIGIT XDIGIT XDIGIT) non può corrispondere ai codepoint sopra \ uFFFF. – Jakob
@Jakob, corretto, l'intervallo supportato è '\ u0000'..' \ uFFFF'. –