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 ) ;
}
我需要为每个标记添加绝对信息以集成内部语法高亮框架。
我已经关注了这个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 ) ;
}