我的语法是:
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'FIELD'}'
我想从作为输入传递的字符串中提取FIELD。例如,当我传递$ {Test String}作为输入时,我得到一个令牌'$ {Test String}',我想从中提取'Test String',即FIELD令牌。我不想按照建议的here更改语法。我还能避免使用正则表达式提取“测试字符串”吗? antlr4是否提供任何提取子令牌的支持?
答案 0 :(得分:1)
ANTLR中没有像子令牌那样的东西。在您的SYNTAX
规则中,FIELD
规则用作片段-本质上只是一个要在该位置扩展的宏。您的语法和
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'[A-Za-z]+'}'
两者都产生完全相同的解析rand lexer。
如果您不希望将其设为解析器规则,则必须自己提取它(正则表达式或其他)。