2016-07-25 36 views
0

我需要爲每個令牌添加絕對信息以集成內部語法高亮框架。javacc specialToken的絕對偏移量

我按照這篇文章: http://ramkulkarni.com/blog/capturing-absolute-offsets-for-javaccjjtree-tokens/

它定期令牌工程確定。

註釋被捕獲爲特殊標記,由於某些原因, CommonTokenAction不適用於這些標記。我HACE調試的問題和產生的XXTokenManager

if ((jjtoSpecial[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) { 
           matchedToken = jjFillToken(); 
... 

後缺少CommonTokenAction呼叫是否有額外的標誌,我可以爲這個工作組? 否則我可以手動更改文件,但我不喜歡它,因爲它是自動生成的。

回答

1

在JavaCC中有三種令牌。解析器不會看到跳過的標記,並且不會爲其創建對象。解析器可以看到常規令牌。特殊標記對解析器不可見,但是爲它們創建了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) ; 
}