Я пишу плагин Eclipse / Xtext для CoffeeScript, и я понял, что мне, вероятно, придется написать лексер для него вручную. Парсер CoffeeScript также использует рукописный лексер для обработки отступов и других уловок в грамматике.
Xtext генерирует класс, расширяющий org.eclipse.xtext.parser.antlr.Lexer
, который, в свою очередь, расширяет org.antlr.runtime.Lexer
. Так что, полагаю, мне придется его продлить.Я вижу два способа сделать это
mTokens ()
. Это делается с помощью сгенерированного кода, меняющего внутреннее состояние. nextToken ()
, что кажется естественным подходом, но тогда мне придется отслеживать внутреннее состояние. Я не смог найти ни одного примера, как написать даже простой лексер для ANTLR без файла грамматики. Так что самым простым ответом будет указатель на один.
Ответ на Xtext: грамматика для языка со значительными / семантическими пробелами относится к todotext , который решает проблему отступов путем изменения токенов в базовом входном потоке. Я не хочу идти по этому пути, потому что было бы сложно справиться с другими трюками грамматики coffeescript.
ОБНОВЛЕНИЕ:
Тем временем я понял, что мой вопрос частично связан с Xtext.