从 Java 中的 ANTLR4 中的令牌中获取子令牌

Get sub tokens from tokens in ANTLR4 in Java

我的语法是:

//parser
expression : SYNTAX;

//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'FIELD'}'

我想从作为输入传递的字符串中提取 FIELD。例如,当我将 ${Test String} 作为输入传递时,我得到一个标记“${Test String}”,我想从中提取 'Test String',即 FIELD 标记。我不想按照建议更改我的语法 here。我是否也可以避免使用正则表达式来提取 'Test String'。 antlr4 是否支持提取子令牌?

A​​NTLR 中没有子令牌。在您的 SYNTAX 规则中,FIELD 规则用作 片段 - 本质上只是一个要在该位置展开的宏。你的语法和

没有区别
//parser
expression : SYNTAX;

//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'[A-Za-z]+'}'

两者都产生完全相同的解析器和词法分析器。

如果您不愿意将其作为解析器规则,则必须自己提取它(正则表达式或其他方式)。