从 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 是否支持提取子令牌?
ANTLR 中没有子令牌。在您的 SYNTAX
规则中,FIELD
规则用作 片段 - 本质上只是一个要在该位置展开的宏。你的语法和
没有区别
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'[A-Za-z]+'}'
两者都产生完全相同的解析器和词法分析器。
如果您不愿意将其作为解析器规则,则必须自己提取它(正则表达式或其他方式)。
我的语法是:
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'FIELD'}'
我想从作为输入传递的字符串中提取 FIELD。例如,当我将 ${Test String} 作为输入传递时,我得到一个标记“${Test String}”,我想从中提取 'Test String',即 FIELD 标记。我不想按照建议更改我的语法 here。我是否也可以避免使用正则表达式来提取 'Test String'。 antlr4 是否支持提取子令牌?
ANTLR 中没有子令牌。在您的 SYNTAX
规则中,FIELD
规则用作 片段 - 本质上只是一个要在该位置展开的宏。你的语法和
//parser
expression : SYNTAX;
//lexer
FIELD : [A-Za-z]+;
SYNTAX : '${'[A-Za-z]+'}'
两者都产生完全相同的解析器和词法分析器。
如果您不愿意将其作为解析器规则,则必须自己提取它(正则表达式或其他方式)。