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

时间:2018-08-03 08:12:10

标签: java regex antlr antlr4

我的语法是:

//parser
expression : SYNTAX;

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

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

1 个答案:

答案 0 :(得分:1)

ANTLR中没有像子令牌那样的东西。在您的SYNTAX规则中,FIELD规则用作片段-本质上只是一个要在该位置扩展的宏。您的语法和

之间没有区别
//parser
expression : SYNTAX;

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

两者都产生完全相同的解析rand lexer。

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