2016-09-05 28 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,如果我的回答帮助你,那么请接受它(左边的复选标记)。如果你觉得它是值得的,你也可以升级它(左边的向上箭头),它给予我额外的分数。 –