【问题标题】:Get sub tokens from tokens in ANTLR4 in Java在 Java 中从 ANTLR4 中的令牌中获取子令牌
【发布时间】:2018-08-03 08:12:10
【问题描述】:
我的语法是:
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'FIELD'}'
我想从作为输入传递的字符串中提取 FIELD。例如,当我将 ${Test String} 作为输入传递时,我得到一个标记“${Test String}”,我想从中提取“测试字符串”,即 FIELD 标记。我不想按照here 的建议更改我的语法。我是否也可以避免使用正则表达式来提取“测试字符串”。 antlr4 是否支持提取子令牌?
【问题讨论】:
标签:
java
regex
antlr
antlr4
【解决方案1】:
在 ANTLR 中没有像子令牌这样的东西。在您的 SYNTAX 规则中,FIELD 规则用作 fragment - 本质上只是一个要在该位置扩展的宏。你的语法和
没有区别
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'[A-Za-z]+'}'
两者都产生完全相同的解析和词法分析器。
如果您不愿意将其设为解析器规则,则必须自己提取(正则表达式或其他方式)。