2011-05-05 21 views
16

Acabo de encontrar una herramienta muy buena Xtext para crear DSL, así como IDE para su edición. Hice una búsqueda en la web y encontré gente diciendo que no proporciona todas las características de ANTLR. Estoy usando ANTLR como mi generador de analizadores.¿Cuáles son las características de ANTLR que XText no proporciona?

Ni siquiera estoy seguro de qué funciones de ANTLR tendré que escribir el analizador completo para mi lenguaje, pero ANTLR existe desde hace bastante tiempo y probablemente sea compatible con más funciones que Xtext.

¿Alguien puede dar algunos ejemplos de lo que NO SE PUEDE especificar en una gramática Xtext?

Respuesta

18

No puede especificar predicados semánticos en una gramática Xtext. Además, no es posible incluir acciones arbitrarias (leer: bloques de código de idioma de destino) con Xtext. La única plataforma de destino compatible es Java.

La buena noticia es que Xtext obtiene grandes beneficios induciendo estas restricciones, p. obtendrá un analizador que permite serializar modelos arbitrarios/gráficos de sintaxis que coincidan con su gramática. Hablando sobre gráficos de sintaxis, con Xtext obtendrás un AST escrito para tu idioma que puedes editar en tu IDE.

Una característica de gramática que es única en la representación de Xtext son los grupos desordenados. Es decir, puedes expresar directamente que ciertos elementos en tu gramática pueden aparecer en orden arbitrario, pero cada uno solo una vez. Si se piensa en los modificadores de Java, esto puede ser muy útil:

visibility=('public'|'private') // this is a mandatory assignment 
& abstractOrFinal=('abstract'|'final')? // this is optional 
& static?='static'? // this will become a boolean value in your ast 

Tener un vistazo a la Xtext docs para más detalles sobre el lenguaje de la gramática.

+0

El punto importante es que Xtext usa internamente ANTLR y afaik, seguramente lo sabe mejor, Xtext tarde o temprano soportará más características de ANTLR como precedencia de operador, etc. ¿verdad? :) –

+0

Xtext tiene el concepto de Acciones (no para confundirse con los literales del lenguaje de destino del cuadro negro de Antlr) para implementar la precedencia del operador. Funciona muy bien para nosotros, especialmente en un entorno interactivo donde la recuperación de errores importa mucho. Dudo que migremos el nuevo esquema Antlr para la implementación de las precendencias. –

Cuestiones relacionadas