如何获得跳过的空格(不跳过的原始令牌)



g4:

grammar KBDP;
WS: [rn t] -> skip;
VARNAME:[_a-zA-Z0-9]+;
OP:[='*,.];
REALVAR:'@' VARNAME; 
prog:sqlsentece+;
sqlsentece:'"' (VARNAME|OP|REALVAR)+'"';

原始sql:

"从myTables中选择*">

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

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

"从myTables中选择*">

如何获取原始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()));
}

最新更新