2016-09-05 86 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:

「SELECT * FROM myTables」

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

ctx.getText()返回令牌跳過空白

「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,如果我的回答幫助你,那麼請接受它(左邊的複選標記)。如果你覺得它是值得的,你也可以升級它(左邊的向上箭頭),它給予我額外的分數。 –