You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在ANTLR4中如何获取Token的实际输入字符串值(保留大小写)

ANTLR4获取Token原始输入字符串的方法

问题场景

在ANTLR4中定义了如下语法规则:

// grammar
root: TRUE eof;

// lexer
TRUE:       T R U E;
fragment T: [tT];
fragment R: [rR];
fragment U: [uU];
fragment E: [eE];

当用户输入true时,生成的解析树结构如下:

root
  /  \
TRUE EOF

目前仅能获取到TRUE这个Token标识,请问是否有办法获取用户输入的实际字符串(如true,保留原有大小写)?

解决方案

完全可以,ANTLR4的Token对象内置了原始输入的文本内容,无需修改语法规则,直接通过Token的API即可获取:

  • Java环境:调用Token的getText()方法,即可拿到对应Token的原始输入字符串
  • Python环境:访问Token的text属性即可获取

Java示例代码

// 假设已完成解析,获取到root节点的ParseTree
ParseTree root = parser.root();
// 获取TRUE对应的Token(也可通过遍历解析树节点获取)
Token trueToken = ctx.TRUE().getSymbol();
String originalInput = trueToken.getText();
// originalInput即为用户输入的原始字符串(如"true"、"TRUE"或"True"等)

监听器/访问者模式示例

如果使用监听器或访问者模式处理解析树,可在对应节点中直接获取Token并提取文本:

@Override
public Void visitRoot(RootContext ctx) {
    Token trueToken = ctx.TRUE().getSymbol();
    String originalText = trueToken.getText();
    // 对原始文本进行后续处理
    return visitChildren(ctx);
}

原理很简单:ANTLR4词法分析器生成Token时,会完整保留输入文本的原始内容,TRUE只是该Token的类型标识,实际输入的字符串始终存储在Token的文本属性中。

内容的提问来源于stack exchange,提问作者David542

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:40:33