我需要为每个令牌添加绝对信息,以集成内部语法高亮框架。
我关注过这篇文章: http://ramkulkarni.com/blog/capturing-absolute-offsets-for-javaccjjtree-tokens/
它适用于常规令牌。
评论被捕获为特殊令牌并出于某种原因
CommonTokenAction
不适用于那些人。我已经调试了这个问题,并且生成的XXTokenManager
在
CommonTokenAction
的调用
if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) {
matchedToken = jjFillToken();
...
我可以为此设置任何其他标志吗? 否则我可以手动更改文件,但我不喜欢它,因为它是自动生成的。
答案 0 :(得分:1)
在JavaCC中有三种令牌。解析器看不到跳过的标记,并且不会为它创建Token
对象。解析器可以看到常规标记。解析器看不到特殊标记,但为它们创建了Token
个对象。常见令牌操作仅适用于常规令牌。
第一个解决方案:通常,如果您正在进行语法突出显示,则不需要解析器,因此没有理由将任何令牌作为特殊令牌。只需进行注释,例如常规令牌,以便将公共令牌操作应用于它们。
第二种解决方案:使所有令牌成为常规或特殊。然后以下内容应该有效。
public void CommonTokenAction(Token t)
{
int c = getCurrentTokenAbsolutePosition() + t.image.length();
do {
t.absoluteEndColumn = c ;
c -= t.image.length() ;
t.absoluteBeginColumn = c;
t = t.specialToken ;
} while( t != null ) ;
}