2016-07-25 1 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에는 3 가지 종류의 토큰이 있습니다. 건너 뛴 토큰은 파서에 표시되지 않으며 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) ; 
}