java - 如何从antlr词法分析器中提取关键字

标签 java 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 本身没有用于标记“关键字”的归因机制,但这就是您应该阅读的内容。取而代之的是,您可以应用一种黑客,该黑客假定语法中的顺序,从而定义关键字“DATABASE”和“FROM”的第一个和最后一个规则。然后,编写一个方法来遍历ruleNames[]数组,您可以随时调用该方法来累积上面定义的第一个和最后一个规则名称之间的所有关键字名称。要完成这项工作,您必须编写一些注释,例如“//在严重处罚时,仅在“DATABASE”和“FROM”之间的规则中添加关键字产生式。但是,Antlr 词法分析器规则是为了匹配首选项而排序的,因此这黑客攻击可能不起作用。

关于java - 如何从antlr词法分析器中提取关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59881498/

相关文章:

java - ANTLR:错误恢复和报告

python - 使用 Python 解析 .h 文件以获取注释的简单方法?

whitespace -\v和\r是什么意思?他们是空格吗?

java - 有什么方法可以避免此 Mockito 测试的 try/catch block ?

java - 如何在 Java 中获取 Activity 连接的打印机?

java - 如何为 Swift 语言创建 Java ANTLR 解析器?

java - 如何使用 ANTLRInputStream 从文件中读取输入?

rust - while 循环推进迭代器 - 这是好的做法吗?

java - DataInputStream readLong() 得到错误的值

java - SpringLayout 问题/挑战