【问题标题】:javacc Absolute offset for specialTokenjavacc specialToken 的绝对偏移量
【发布时间】:2023-03-17 06:57:01
【问题描述】:

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

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

它适用于常规令牌。

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

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

我可以设置任何其他标志以使其正常工作吗? 否则我可以手动更改文件,但我不喜欢它,因为它是自动生成的。

【问题讨论】:

    标签: java parsing token syntax-highlighting javacc


    【解决方案1】:

    在 JavaCC 中有三种标记。跳过的标记对解析器不可见,并且不会为其创建 Token 对象。解析器可以看到常规标记。解析器看不到特殊标记,但为它们创建了 Token 对象。通用令牌操作仅适用于常规令牌。

    第一个解决方案:通常,如果您要进行语法突出显示,则不需要解析器,因此任何标记都没有理由成为特殊标记。只需制作 cmets 之类的常规令牌,以便将通用令牌操作应用于它们。

    第二种解决方案:将所有标记设为常规或特殊。那么以下应该可以工作。

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

    【讨论】:

      猜你喜欢
      • 2020-03-02
      • 1970-01-01
      • 2017-12-02
      • 2014-11-20
      • 2017-10-18
      • 1970-01-01
      • 2013-06-07
      • 2012-11-03
      • 1970-01-01
      相关资源
      最近更新 更多