【发布时间】:2011-12-23 18:32:09
【问题描述】:
我正在为 CoffeeScript 编写一个 Eclipse/Xtext 插件,我意识到我可能需要为它手动编写一个词法分析器。 CoffeeScript 解析器还使用hand-written lexer 来处理语法中的缩进和其他技巧。
Xtext 生成一个扩展org.eclipse.xtext.parser.antlr.Lexer 的类,而后者又扩展org.antlr.runtime.Lexer。所以我想我会延长它。我可以看到两种方法来做到这一点
- 覆盖
mTokens()。这是由生成的代码完成的,改变内部状态。 - 覆盖
nextToken()这似乎是一种自然的方法,但是我必须跟踪内部状态。
我找不到任何示例,即使没有语法文件也可以为 ANTLR 编写简单的词法分析器。所以最简单的答案是指向一个的指针。
Xtext: grammar for language with significant/semantic whitespace 的答案是指todotext,它通过更改底层输入流中的标记来处理缩进问题。我不想那样做,因为处理咖啡脚本语法的其他技巧会很困难。
更新:
与此同时,我意识到我的问题部分是针对 Xtext 的。
【问题讨论】:
-
您只需要实现
ITokenSource- 并在nextToken方法中执行您需要执行的任何操作。您是否查看过stackoverflow.com/questions/4414166/… Definitive Antlr Reference 中有处理缩进的示例(例如在 Python 中)。