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