2016-09-05 7 views
1

G4 :건너 뛴 공백을 가져 오는 방법 (건너 뛰지 않고 원래 토큰)?

grammar KBDP; 
WS: [\r\n \t] -> skip; 

VARNAME:[_a-zA-Z0-9]+; 
OP:[='*,.]; 
REALVAR:'@' VARNAME; 

prog:sqlsentece+; 
sqlsentece:'"' (VARNAME|OP|REALVAR)+'"'; 

원본 SQL :

public void enterSqlsentece(KBDPParser.SqlsenteceContext ctx) 
    { 
     ctx.getText(); 
    } 

ctx.getText() 반환 "myTables SELECT * FROM"토큰이 생략 공백

"select * frommyTables"

.

원본 SQL "select * from myTables"(공백 포함)를 얻으려면 어떻게해야합니까?

답변

1

각 구문 컨텍스트에는이 컨텍스트를 구성하는 토큰을 가리키는 시작 토큰과 끝 토큰이 있습니다. 토큰은 다른 속성들 중에서 원본 소스 스트림의 문자 오프셋을 나타내는 시작 인덱스와 끝 인덱스를 포함합니다. 연관된 CharStream을 사용하면 getText (Interval (from, to)); 메서드를 사용하여 컨텍스트의 원본 텍스트를 가져옵니다.

예 :

public void enterSqlsentece(KBDPParser.SqlsenteceContext ctx) 
{ 
    CharStream cs = ctx.start.getTokenSource().getInputStream(); 
    String originalText = cs.getText(Interval.of(ctx.start.getStartIndex(), ctx.stop.getStopIndex())); 
} 
+0

난 당신이 내가 Java 및 Antlr4 모두 주니어이기 때문에 나는이 과도한 요구에 대한 죄송 특정 코드를 게시 할 문제는 – MarkMa

+0

당신을 매우 감사 대단히 감사합니다 수 있을까요? 많이 도와주세요 :) – MarkMa

+0

@MarkMa, 내 대답이 도움이된다면 받아 들여주세요 (왼쪽의 체크 표시). 당신이 가치가 있다고 생각하면 그것을 upvote 수 있습니다 (왼쪽에있는 위쪽 화살표), 어떤 포상은 나에게 추가 포인트. –