Czy są jakieś narzędzia do konwersji składni gramatyki ANTLR na i od innych składni BNF? Istnieje kilka form postaci Backus-Naur (BNF, EBNF, ABNF, W3C-BNF, XBNF ...) ze specyfikacją, np. see this list. Składnia gramatyki ANTLR wydaje się być tylko described by examples. Wiem, że pliki gramatyki ANTLR zawierają więcej niż specyfikację składni bezkontekstowej, ale powinieneś być w stanie przekonwertować przynajmniej wspólny podzbiór - czy ktoś jeszcze zrobił to automatycznie?Czy istnieją narzędzia do konwersji między ANTLR a innymi formami BNF?
Odpowiedz
Jakob napisał:
Składnia gramatyki ANTLR tylko wydaje się być opisany za pomocą przykładów.
ANTLR (v3) jest napisane "w jego własnych słów" (jak sam Terence Parr umieścić go) w tej gramatyce:
http://www.antlr.org/grammar/ANTLR/ANTLRv3.g
Jakob napisał:
ale powinieneś być w stanie przekonwertować przynajmniej c ommon podzbiór - czy ktoś zrobił jeszcze automatycznie?
Nie to, co wiem. A jeśli to istnieje, nigdy nie widziałem tego narzędzia omawianego na liście mailingowej ANTLR, którą czytam regularnie.
Należy również zauważyć, że wiele wariantów BNF zezwala na reguły left-recursive, coś, z czym generator parowania LL taki jak ANTLR nie może sobie poradzić. Lewe reguły rekursywne mogą oczywiście zostać ponownie przeanalizowane przez narzędzie, ale może to być raczej trudne i prawdopodobnie spowoduje, że gramatyka "czytelna" będzie znacznie mniejsza niż ta, którą można uzyskać, niż robi to ręcznie.
Jeśli chodzi o przekształcanie gramatyk ANTLR w formę podobną do BNF, to byłoby to łatwiejsze, ale tylko z najbardziej trywialnymi gramatykami. Gdy tylko różne typy predykatów zostaną wprowadzone do gramatyki ANTLR, konwersja może ponownie stać się trudna.
# 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`
Proszę, popraw mnie, jeśli się mylę. Jestem nowy w tym.^_^b – Travis
Tak, możesz mapować między różnymi składniami przynajmniej dla prostych gramatyk. Szukałem narzędzia, które wykonuje tę konwersję (BNF, ISO EBNF, ABNF, ANTLR ...). Oczywiście możliwe jest stworzenie własnego narzędzia ;-) – Jakob
- 1. Czy są narzędzia programistyczne do Perla do konwersji w Pythonie?
- 2. ANTLR: Różnica między wstecznym a wyprzedzeniem?
- 3. Czy istnieją ścisłe reguły konwersji JSON na XML iz powrotem?
- 4. Czy istnieją narzędzia, które pomagają organizować #includes?
- 5. Jakie narzędzia do krojenia programów istnieją?
- 6. Czy istnieją narzędzia .NET do zniekształcania/wypaczania obrazów?
- 7. Czy istnieją narzędzia do zarządzania jakością inne niż SonarQube
- 8. Czy istnieją dobre narzędzia do inżynierii odwrotnej C#?
- 9. Czy istnieją jakieś narzędzia do śledzenia problemów Node.js?
- 10. Czy istnieją narzędzia do porównywania/scalania "inteligentne"/kontekstowe?
- 11. Jakie narzędzia do autotestowania istnieją dla Clojure
- 12. Czy są jakieś narzędzia do konwersji starszego VML na SVG?
- 13. Jakie narzędzia XSLT 2.0 istnieją?
- 14. Data ważności Weirdness między Firefoksem a wszystkimi innymi użytkownikami
- 15. Czy istnieją debuggery gramatyki Yacc?
- 16. Xcode Jaka jest różnica między "Innymi flagami Linkera" a "Innymi_LDFLAGS"
- 17. Udostępnianie modeli sqlalchemy między kolbą a innymi aplikacjami
- 18. Konwersja EBNF na BNF
- 19. Jakie narzędzia istnieją do budowania pakietów debian do celów wdrażania?
- 20. Czy istnieją narzędzia ETL integrujące się z modelami Rails?
- 21. Jaka jest różnica między tymi trzema formami anonimowo wywołującymi funkcję?
- 22. lub konfliktu między innymi warunkami
- 23. Czy istnieją narzędzia optymalizacji zapytań dla serwera SQL Server?
- 24. Jakie narzędzia istnieją do testowania wielowątkowego kodu .net?
- 25. Różnice między RISC-V i innymi ISA
- 26. Dodaj nową kolumnę między innymi dataframe kolumn
- 27. Czy są jakieś narzędzia do konwersji kodu źródłowego c/C++ do html?
- 28. Narzędzia do konwersji wielostronicowego pliku PDF na wielostronicowy TIFF
- 29. Narzędzia do konwersji innych niż Java w Java source
- 30. Czy ANTLR 4 jest szybszy od ANTLR 3?
Dzięki temu gramatyka ANTLR napisana w ANTLR była jedną rzeczą, której szukałem. O ile rozumiem ANTLR, możesz * zapisać * gramatyki lewostronne, ale musisz je potem ręcznie skorygować. Konwerter z innych form BNF i ANTLR przynajmniej zmniejszyłby potrzebę ręcznego przyjmowania różnic w punktacji i innych pomniejszych aspektach wariantów składni BNF. – Jakob
Wygląda na to, że ANTLR nie radzi sobie ze znakami Unicode powyżej Podstawowej płaszczyzny wielojęzycznej: ESC: "\\" (... | 'u' XDIGIT XDIGIT XDIGIT XDIGIT) nie może dopasować współrzędnych powyżej \ uFFFF. – Jakob
@Jakob, popraw, obsługiwanym zakresem jest '\ u0000'..' \ uFFFF'. –