¿Cómo puedo usar Xtext para analizar los idiomas con espacios en blanco semánticos? Intento escribir una gramática para CoffeeScript y no puedo encontrar ninguna buena documentación sobre esto.Xtext: gramática para el lenguaje con espacios en blanco significativos/semánticos
Respuesta
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.
He aquí un ejemplo whitespace sensitive language en xtext
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.
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/) –
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.
- 1. Convertir la gramática Antlr simple a Xtext
- 2. Ignorar espacios en blanco con PEG.js
- 3. Método SQL para reemplazar espacios en blanco repetidos con espacios en blanco únicos
- 4. división por espacios en blanco o múltiples espacios en blanco
- 5. Ack buscar con espacios en blanco
- 6. Solr consulta comodín con espacios en blanco
- 7. ¿Cómo eliminar elementos con espacios en blanco?
- 8. Espacios en blanco en CLASSPATH
- 9. XText en un producto RCP
- 10. JSF recortar espacios en blanco
- 11. Espacios en blanco en Java
- 12. Scala tira espacios en blanco
- 13. Problemas con Xtext en eclipse
- 14. Gramática del lenguaje natural y nombres ingresados por el usuario
- 15. ¿Cómo especificar una ruta con espacios en blanco con cmake?
- 16. Dividir una cadena con múltiples espacios en blanco con perl?
- 17. Espacios en blanco e indentación en F #
- 18. Xtext referencias cruzadas personalizadas
- 19. Ruby reducir todos los espacios en blanco a espacios individuales
- 20. Bucle en directorios con espacios en blanco en Bash
- 21. Gramática y sintaxis de typedef en lenguaje C
- 22. espacios en blanco en la petición AJAX con jQuery
- 23. NSPredica que ignora espacios en blanco
- 24. ¿Puede fscanf() leer espacios en blanco?
- 25. Espacios en blanco adicionales en valores HTML procesados con Jade
- 26. Cómo recortar espacios en blanco entre caracteres
- 27. HTML/CSS espacios en blanco romper
- 28. Preservar espacios en blanco de atributos
- 29. Regex - coincide con todo sin espacios en blanco
- 30. MySQL reemplazar todos los espacios en blanco con -
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. –
Parece estar alojado en github ahora https://github.com/ralfebert/org.eclipselabs.todotext –
Desafortunadamente, no puedo encontrar esta muestra en ningún lado. – rds