Escribo un plugin de Eclipse/Xtext para CoffeeScript, y me di cuenta de que probablemente necesite escribir un lexer manualmente. El analizador de CoffeeScript también usa un hand-written lexer para manejar sangrías y otros trucos en la gramática.Escribiendo un lexer Xtext/ANTLR personalizado sin un archivo de gramática
Xtext genera una clase que se extiende org.eclipse.xtext.parser.antlr.Lexer
que a su vez se extiende org.antlr.runtime.Lexer
. Entonces supongo que tendré que extenderlo. Puedo ver dos formas de hacerlo
- Anular
mTokens()
. Esto se hace mediante el código generado, cambiando el estado interno. - Sobrescribe
nextToken()
que parece un enfoque natural, pero tendré que hacer un seguimiento del estado interno.
No he podido encontrar ningún ejemplo de cómo escribir incluso un simple lexer para ANTLR sin un archivo de gramática. Entonces la respuesta más fácil sería un puntero a uno.
Una respuesta a Xtext: grammar for language with significant/semantic whitespace se refiere a todotext que maneja el problema de la sangría al cambiar los tokens en el flujo de entrada subyacente. No quiero ir por ese camino, porque sería difícil manejar otros trucos de la gramática del coffeescript.
ACTUALIZACIÓN:
me di cuenta de que, mientras tanto, mi pregunta era en parte xtext específica.
Solo necesita implementar 'ITokenSource' - y haga lo que tenga que hacer en el método' nextToken'. ¿Has comprobado http://stackoverflow.com/questions/4414166/antlr-parser-with-manlier-lexer? Hay ejemplos sobre el manejo de sangrías (en Python, por ejemplo) en la Referencia definitiva de Antlr. – Jimmy