Quiero convertir una gramática Antlr muy simple a Xtext, por lo que no syntactic predicates, no fancy features of Antlr not provided by Xtext. Considere esta gramáticaConvertir la gramática Antlr simple a Xtext
grammar simple; // Antlr3
foo: number+;
number: NUMBER;
NUMBER: '0'..'9'+;
y su contraparte xtext
grammar Simple; // Xtext
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
generate Simple "http://www.example.org/Simple"
Foo: dummy=Number+;
Number: NUMBER_TOKEN;
terminal NUMBER_TOKEN: '0'..'9'+;
xtext utiliza Antlr detrás de las escenas, pero el formato de dos no son exactamente lo mismo. Hay algunas cosas bastante molesto (y en parte comprensibles) que tengo que modificar, entre ellos:
- terminales de prefijo con la palabra clave
terminal
import "http://www.eclipse.org/emf/2002/Ecore" as ecore
Incluir también para hacer terminales funcionan- agregar una función a la parte superior- regla de nivel, por ejemplo
foo: dummy=number+
- Tenga en cuenta que las reglas y los nombres de los terminales deben ser únicos, incluso sin distinción entre mayúsculas y minúsculas.
- Opcionalmente, escriba en mayúscula la primera letra de los nombres de las reglas para seguir la convención de Java.
¿Existe alguna herramienta para realizar esta conversión automáticamente al menos en casos simples? Si no, ¿hay una lista de verificación más completa de tales modificaciones requeridas?
No conoces ninguna herramienta que haga exactamente lo que quieres, pero podrías [convertir] (http://bottlecaps.de/convert/) la gramática a XML y luego ejecutar XQuery o XSLT en el resultado para transformar al formato de destino deseado. El convertidor solo entiende la estructura básica de una gramática ANTLR, pero eso es lo que usted solicitó. – Gunther
@BartKiers y Gunther, les agradezco a ambos por su ayuda, pero esta conversación parece desviarse del tema. Gunther, es posible que tenga un rastreador de problemas para su convertidor (que también uso, con mucho gusto), por lo que puede continuar allí. –
@ AdamSchmideg, tienes razón, no fue del todo sobre el tema, pero comenzó con un comentario que estaba en el tema: para ser sincero, creo que eres un poco riguroso. Pero es justo, es tu pregunta, así que eliminaré mi ruido. Mis disculpas. @Gunther, intenté explicar el uso del carácter '~' en esta sección de preguntas y respuestas: http://stackoverflow.com/questions/8284919/negating-inside-lexer-and-parser-rules –