java - 如何获取跳过的空白(未跳过的原始标记)?

标签 java antlr4 dsl

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/

相关文章:

java - 将图像保存到桌面时出现问题

java - 使用 JDBC arraylist 进行简单的套接字编程和线程

java - 为什么该进程不在后台运行?

java - antlr4 中的 <EOF> 不匹配

maven - Antlr4 maven插件中指定包的格式是什么?

.net - Microsoft Visual Studio SDK DSL工具-认真考虑吗?

elasticsearch - 术语字段汇总

java - 打印露天异常

antlr4 - 如何在antlr lexer中处理嵌套注释

java - ANTLR - 语法和树语法之间的 token 枚举不匹配