Sto scrivendo un plugin Eclipse/Xtext per CoffeeScript e ho capito che probabilmente avrò bisogno di scrivere un lexer a mano. Il parser di CoffeeScript utilizza anche un hand-written lexer per gestire il rientro e altri trucchi nella grammatica.Scrivere un lexer Xtext/ANTLR personalizzato senza un file di grammatica
Xtext genera una classe che estende org.eclipse.xtext.parser.antlr.Lexer
che a sua volta estende org.antlr.runtime.Lexer
. Quindi suppongo che lo proverò. Posso vedere due modi per farlo
- Ignora
mTokens()
. Questo viene fatto dal codice generato, cambiando lo stato interno. - Override
nextToken()
che sembra un approccio naturale, ma poi dovrò tenere traccia dello stato interno.
Non ho trovato alcun esempio su come scrivere anche un semplice lexer per ANTLR senza un file di grammatica. Quindi la risposta più semplice sarebbe un puntatore a uno.
Una risposta a Xtext: grammar for language with significant/semantic whitespace si riferisce a todotext che gestisce il problema di indentazione modificando i token nel flusso di input sottostante. Non voglio andare in quel modo, perché sarebbe difficile gestire altri trucchi della grammatica del coffeescript.
UPDATE:
mi sono reso conto, nel frattempo che la mia domanda era in parte xtext specifica.
Devi solo implementare 'ITokenSource' e fare tutto ciò che devi fare nel metodo' nextToken'. Hai controllato http://stackoverflow.com/questions/4414166/antlr-parser-with-manual-lexer. Esistono degli esempi sulla gestione dei rientri (in Python, ad esempio) nel Riferimento antlr definitivo. – Jimmy