2011-08-23 5 views

Respuesta

4

AFAIK, no se puede.

En el caso de analizar lenguajes similares a Python, necesitaría el lexer para emitir INDENT y DEDENT tokens. Para que eso suceda, necesitaría predicados semánticos para ser soportados dentro de las reglas lexer (reglas de Xtext terminal) que verificaran primero si la posición actual en línea del siguiente caracter int la entrada es igual a 0 (el comienzo de la línea)) y es un ' ' o '\t'.

Pero navegando a través del documentation, no veo que esto sea compatible con Xtext en este momento. Desde Xtext 2.0, el soporte tiene agregado para los predicados semánticos en las reglas de producción (ver: 6.2.8 Predicados sintácticos), pero no en las reglas de la terminal.

La única manera de hacer esto con Xtext sería dejar que el lexer produzca espacios de línea y saltos de línea, pero esto haría un lío total de sus reglas de producción.

Si desea analizar una lengua tan usando Java (y un generador de análisis orientado a Java) Me gustaría recomendar antlr, en el que se puede emitir tales INDENT y DEDENT fichas con bastante facilidad. Pero si está interesado en la integración de Eclipse, entonces no veo cómo podría hacerlo con Xtext, lo siento.

17

He aquí un ejemplo whitespace sensitive language en xtext

+0

Genial (tendré que profundizar en XText un poco, una _una_pregunta de respuesta en esta etiqueta todavía ... :))! No puedo eliminar mi respuesta, ya que es la respuesta [email protected] necesita aceptar el tuyo antes de que pueda eliminar el mío. –

+0

Parece estar alojado en github ahora https://github.com/ralfebert/org.eclipselabs.todotext –

+2

Desafortunadamente, no puedo encontrar esta muestra en ningún lado. – rds

2

Para las personas interesadas en CoffeeScript, Adam Schmideg tiene una Eclipse plugin that uses XText.

Para las personas interesadas en analizar DSL similares a Python en XText, el código de Ralf Ebert para Todotext mencionado anteriormente ya no está disponible en Github pero lo puedes encontrar en el Eclipse test repository. Consulte el original thread sobre este trabajo y el Eclipse issue que se planteó al respecto.

He estado jugando con este código hoy y mi conclusión es que ya no funciona en la versión actual de XText. Cuando XText se usa en Eclipse, creo que se trata de un "análisis parcial". Esto no es compatible con el lexer con estado que necesita para procesar los lenguajes de detección de indentación. Así que sospecho que incluso si aplica parche a la impresora lexer, el editor de Eclipse no funciona. En el tema, parece que Ralf propuso parches para abordar estos problemas, pero al examinar la fuente de XText, estos cambios parecen haberse esfumado hace tiempo. Si estoy equivocado y alguien puede hacer que funcione, ¿estaría muy interesado?

Hay una implementación diferente here pero tampoco puedo conseguir que funcione con la versión actual de XText.

En su lugar he cambiado a parboiled que admite indentation based grammars fuera de la caja.

+0

Otros que experimentan el mismo problema: [publicar en la lista de XText de marzo de 2013] (http://www.eclipse.org/forums/index.php/mv/tree/457763/) –

3

La versión 2.8 de Xtext viene con soporte para Whitespace-Aware Languages. Esta versión se envía con el "Ejemplo de automatización del hogar" que puede usar como plantilla.

Cuestiones relacionadas