Java 如何获取跳过的空格(不跳过的原始标记)?
g4: 原始sql: “从myTables中选择*”Java 如何获取跳过的空格(不跳过的原始标记)?,java,antlr4,dsl,Java,Antlr4,Dsl,g4: 原始sql: “从myTables中选择*” ctx.getText()返回跳过空白的令牌 “从MyTables中选择*frommyTables” 如何获取原始sql“select*from myTables”(带空格)?每个解析上下文都有一个起始标记和一个结束标记,指向构成此上下文的标记。除其他属性外,令牌还具有开始+结束索引,这些索引指示原始源流中的字符偏移量。使用关联的CharStream及其getText(Interval(from,to));方法获取上下文的原始文本 例如:
ctx.getText()
返回跳过空白的令牌
“从MyTables中选择*frommyTables”
如何获取原始sql“select*from myTables”(带空格)?每个解析上下文都有一个起始标记和一个结束标记,指向构成此上下文的标记。除其他属性外,令牌还具有开始+结束索引,这些索引指示原始源流中的字符偏移量。使用关联的CharStream及其getText(Interval(from,to));方法获取上下文的原始文本 例如:
public void enterSqlsentece(KBDPParser.SqlsenteceContext ctx)
{
ctx.getText();
}
我可以麻烦你发布具体的代码吗?对于这个过度的需求,我很抱歉,因为我在Java和Antlr4方面都是初级的,非常感谢你的帮助:)@MarkMa,如果我的回答对你有帮助,请接受它(左边的复选标记)。如果你觉得值得,你也可以向上投票(左边的向上箭头),这会给我额外的分数。我真的很抱歉,stackoverflow给我的分数不到15,我会接受你的答案。我会在我的分数超过15时接受,我保证。再次感谢你的帮助。嗯……似乎投票被记录下来了,但没有显示(accpet的数量没有改变)。
public void enterSqlsentece(KBDPParser.SqlsenteceContext ctx)
{
ctx.getText();
}
public void enterSqlsentece(KBDPParser.SqlsenteceContext ctx)
{
CharStream cs = ctx.start.getTokenSource().getInputStream();
String originalText = cs.getText(Interval.of(ctx.start.getStartIndex(), ctx.stop.getStopIndex()));
}