javaccspecialToken 的绝对偏移量

标签 java parsing token syntax-highlighting javacc

我需要向每个标记添加绝对信息以集成内部语法突出显示框架。

我关注了这篇文章: http://ramkulkarni.com/blog/capturing-absolute-offsets-for-javaccjjtree-tokens/

对于常规 token 来说它可以正常工作。

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

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

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

最佳答案

在 JavaCC 中,存在三种 token 。跳过的标记对解析器不可见,并且不会为其创建 Token 对象。常规标记对解析器是可见的。特殊标记对于解析器来说是不可见的,但是 Token 对象是为它们创建的。常见 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 ) ;
}

关于javaccspecialToken 的绝对偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38577774/

相关文章:

java - 如何让RecyclerView在不滚动的情况下查看某个位置?

javascript - 是否可以在 JS 代码中以编程方式设置 Jison 解析器的状态?

c++ - 在 ‘,’ token { (C++)

Antlr(词法分析器): matching the right token

java - 换行符可以用空格代替吗? (词法分析器)

java - 如何在一个项目中同时使用Androidx库和支持库?

java - 如何在填充表时在jtable中设置图标?

java - 程序退出时的 JNA 错误

javascript - parseInt() 的最大基数?

javascript - 从JSON字符串获取数据,foreach,多个同类型