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”(带空格)?
最佳答案
每个解析上下文都有一个开始和一个结束标记,它们指向组成该上下文的标记。除其他属性外, token 还具有 start + end 索引,它们指示原始源流中的字符偏移量。使用关联的 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()));
}
关于java - 如何获取跳过的空白(未跳过的原始标记)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39323388/