从Java中ANTLR4中的令牌获取子令牌
我的语法是:从Java中ANTLR4中的令牌获取子令牌,java,regex,antlr,antlr4,Java,Regex,Antlr,Antlr4,我的语法是: //parser expression : SYNTAX; //lexer FIELD : [A-Za-z]+; SYNTAX : '${'FIELD'}' 我想从作为输入传递的字符串中提取字段。例如,当我将${Test String}作为输入传递时,我得到一个标记“${Test String}”,我想从中提取“Test String”,即字段标记。我不想按照建议修改语法。我还可以避免使用正则表达式提取“测试字符串”吗。antlr4是否提供提取子令牌的任何支持?在ANTLR中没
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'FIELD'}'
我想从作为输入传递的字符串中提取字段。例如,当我将${Test String}作为输入传递时,我得到一个标记“${Test String}”,我想从中提取“Test String”,即字段标记。我不想按照建议修改语法。我还可以避免使用正则表达式提取“测试字符串”吗。antlr4是否提供提取子令牌的任何支持?在ANTLR中没有类似的子令牌。在
语法中
规则中,字段
规则充当一个片段-本质上只是一个要在该位置展开的宏。你的语法和语法没有区别
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'[A-Za-z]+'}'
两者都产生完全相同的语法分析器和词法分析器
如果您不愿意将其作为解析器规则,那么您必须自己提取它(regex或其他形式)。在ANTLR中没有比子标记更好的东西。在
语法中
规则中,字段
规则充当一个片段-本质上只是一个要在该位置展开的宏。你的语法和语法没有区别
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'[A-Za-z]+'}'
两者都产生完全相同的语法分析器和词法分析器
如果您不愿意将其作为解析器规则,则必须自己提取(regex或其他)