如何从antlr lexer中提取关键字

How to extract keywords from antlr lexer

我正在 Java 中构建一个文本编辑器,用于我没有编写的语法,我想支持语法突出显示。我有一个包含关键字的词法分析器文件(以下是一个子集):

DATABASE: 'DATABASE';
NATIVE: 'NATIVE' -> mode(NATIVE_QUERY);
SOURCE: 'SOURCE';
CHECK: 'CHECK';
ACTION: 'ACTION';
EXECUTE: 'EXECUTE';
USING: 'USING';
ON: 'ON';
EACH: 'EACH';
FROM: 'FROM';

我想动态读取这些关键字,以便在我制作的文本编辑器中使用这些关键字的语法高亮显示。我目前正在手动执行此操作,但我希望文本编辑器动态执行此操作,以防作者更改词法分析器。我该怎么做呢?这是正确的做法吗?

我认为 Antlr 本身没有用于标记 "keywords" 的归因机制,但这是您应该继续阅读的内容。取而代之的是,您可以应用一个 hack,它假定语法中的顺序,您可以在其中定义关键字 "DATABASE" 和 "FROM" 的第一个和最后一个规则。然后,编写一个方法来遍历您可以随时调用的 ruleNames[] 数组,以累积您在上面定义的第一个和最后一个规则名称之间的所有关键字名称。要完成这项工作,您必须写一些评论,例如“// On severe penalty, only add keyword productions in rules between "DATABASE" and "FROM"。然而,Antlr lexer rules is ordered for matching偏好,所以这个 hack 可能行不通。