¿Hay alguna herramienta para convertir la sintaxis de gramática ANTLR ay desde otras sintaxis BNF? Existen varias formas Backus-Naur Form (BNF, EBNF, ABNF, W3C-BNF, XBNF ...) con especificación, p. see this list. La sintaxis de gramática ANTLR solo parece ser described by examples. Sé que los archivos de gramática ANTLR contienen más que la especificación de una sintaxis sin contexto, pero debería poder convertir al menos el subconjunto común, ¿alguien lo ha hecho aún de forma automática?¿Hay herramientas para convertir entre ANTLR y otras formas de BNF?
Respuesta
Jakob escribió:
La sintaxis de la gramática antlr sólo parece ser descrito por medio de ejemplos.
antlr (v3) se escribe "en sus propias palabras" (como él mismo Terence Parr puso) en esta gramática:
http://www.antlr.org/grammar/ANTLR/ANTLRv3.g
Jakob escribió:
pero debe ser capaz de convertir al menos la c subconjunto ommon: ¿alguien lo ha hecho de forma automática?
No que yo sepa. Y si existe, nunca he visto esta herramienta discutida en la lista de correo de ANTLR que leo regularmente.
También tenga en cuenta que muchas variantes de BNF permiten las reglas left-recursive, algo que un generador de analizador de LL como ANTLR no puede manejar. Por supuesto, la herramienta puede volver a factorizar las reglas recursivas de la izquierda, pero eso podría ser un poco complicado, y probablemente dará como resultado una gramática mucho menos "legible" de la que obtendría que hacerlo manualmente.
En cuanto a la conversión de gramáticas ANTLR en forma BNF sería más fácil, supongo, aunque solo con las gramáticas más triviales. Tan pronto como varios tipos de predicados se incluyan en una gramática ANTLR, la conversión podría volverse complicada.
# 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`
Por favor corrígeme si estoy equivocado. Soy nuevo en esto.^_^b – Travis
Sí, puede asignar una sintaxis diferente, al menos para gramáticas simples. Estaba buscando una herramienta que realice esta conversión (BNF, ISO EBNF, ABNF, ANTLR ...). Claro que es posible crear su propia herramienta ;-) – Jakob
- 1. ¿Hay un modo BNF para Emacs?
- 2. Otras herramientas para desarrolladores de Android
- 3. Convertir la gramática Antlr simple a Xtext
- 4. Convirtiendo EBNF a BNF
- 5. ¿Hay herramientas para integrar Java y C++?
- 6. ¿Hay una gramática similar a BNF para describir LLVM IR?
- 7. ¿Cuál es el BNF de BNF? es decir, ¿cómo definimos una meta gramática BNF?
- 8. ¿Hay otras herramientas de interceptación HTTP/HTTPS que no sean Fiddler, Charles, Poster y Achilles?
- 9. ¿Hay otras opciones de búsqueda para heroku
- 10. ¿Hay un archivo de gramática C++ en funcionamiento para ANTLR?
- 11. ¿Qué otras herramientas de analítica web existen?
- 12. Erlang y Antlr
- 13. ANTLR para C# y atributo CLSCompliant
- 14. Flujo de control en T-SQL SP usando IF..ELSE IF - ¿Hay otras formas?
- 15. ¿Cuál es la relación entre Xtext y ANTLR?
- 16. Otras formas de realizar la operación de módulo
- 17. Generador de editor para gramáticas ANTLR?
- 18. ¿Qué herramientas hay para cortar un PSD?
- 19. ¿Mejores formas de convertir XPS a PDF (y viceversa)?
- 20. ¿Hay otras herramientas de gestión de calidad que no sean SonarQube
- 21. Lexer/analizador para generar código Scala a partir de la gramática BNF
- 22. ¿Hay algún lenguaje simple implementado usando ANTLR o similar?
- 23. Hay una diferencia entre (función() {...}()); y (función() {...})() ;?
- 24. antlr gramática: parser- y analizadoras literales
- 25. Scala Parser Combinators trucos para bnf recursivo?
- 26. Diseño modelo para la comprobación de colisión entre las formas
- 27. Agregar número a QString con arg(), ¿hay mejores formas?
- 28. ¿Qué herramientas de diseño, edición y dibujo de gráficos hay?
- 29. ¿Qué herramientas (gratuitas u otras) encuentra útiles para desarrollar y depurar C#/C++?
- 30. ¿Hay diferencias entre "y"
Gracias, la gramática ANTLR escrita en ANTLR era una cosa que estaba buscando. Por lo que yo entiendo, ANTLR * puedes * escribir gramáticas recursivas a la izquierda, pero luego debes refactorizarlas a mano. Un convertidor de otras formas BNF y ANTLR reduciría al menos la necesidad de adoptar manualmente las diferencias en la punción y otros aspectos menores de las variantes de sintaxis BNF. – Jakob
Parece que ANTLR no puede hacer frente a los caracteres Unicode por encima del plano multilingüe básico: ESC: '\\' (... | 'u' XDIGIT XDIGIT XDIGIT XDIGIT) no puede coincidir con los puntos de código por encima de \ uFFFF. – Jakob
@Jakob, correcto, el rango admitido es '\ u0000'..' \ uFFFF'. –