javacc specialToken 的绝对偏移量

javacc Absolute offset for specialToken

我需要为每个标记添加绝对信息以集成内部语法高亮框架。

我已经关注了这个post: http://ramkulkarni.com/blog/capturing-absolute-offsets-for-javaccjjtree-tokens/

而且它适用于常规令牌。

出于某种原因,评论被捕获为特殊标记 CommonTokenAction 不适用于那些。我 hace 调试了这个问题,生成的 XXTokenManager

之后缺少对 CommonTokenAction 的调用
    if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) {
                                matchedToken = jjFillToken(); 
...   

我可以设置任何额外的标志来让它工作吗? 否则我可以手动更改文件,但我不喜欢它,因为它是自动生成的。

在 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 ) ;
}