Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Java中ANTLR4中的令牌获取子令牌_Java_Regex_Antlr_Antlr4 - Fatal编程技术网

从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或其他)