如何获得跳过的空白(没有跳过的原始标记)?

How to get the skipped blanks (original tokens without skipping)?

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() returns 标记跳过空白

"select*frommyTables"

.

我怎样才能得到原文 sql "select * from myTables"(带空格)?

每个解析上下文都有一个开始和结束标记,它们指向组成该上下文的标记。除其他属性外,令牌还具有起始索引和结束索引,这些索引指示原始源流中的字符偏移量。使用关联的 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()));
}