Intellij语言插件:使用JFlex词法分析器编辑时的语法高亮显示

时间:2014-12-15 13:53:09

标签: syntax-highlighting vala intellij-plugin jflex

我正在开发一个Intellij Vala插件。在编辑文件时,我坚持要使关键字突出显示工作。

当我打开文件时,所有关键字(到目前为止只有classref)都会正确突出显示。 但是,当我输入class时,它不会突出显示(仅在我重新打开文件后)。有趣的是,ref一切正常。

我设法调查一下,在输入每个字符时,我的lexer是在一段只有4个字符长的文本段上启动的。因此,突出显示比{1}更短的ref,但class不是。字符串也是如此:如果它们短于4个字符,则会突出显示它们(例如"a")。我查看了Intellij SDK的源代码,每次文档更改时分析的文本长度都是使用某种段来计算的。我对Intellij体系结构的经验不足以理解它。 有人可以帮忙吗?

我的插件的来源(到目前为止没什么特别的)是here。 我正在使用Intellij社区构建 139.225.3

1 个答案:

答案 0 :(得分:1)

好的,我找到了解决方案。当我向lexer添加Identifier令牌时,突出显示开始起作用。

我猜现在使用Identifier标记时,lexer在看到字母数字字符时看到它现在将它们附加到某种缓冲区来构造一个标识符,然后当它们突然形成一个关键字时它们会突出显示。在此之前,我认为当遇到一个糟糕的词典时,词法分析器就会忘记它并继续进行。再说一次,这些只是我的假设。仍然不知道为什么前面分析的4个字符。