antlr4:如何从解析器规则中的令牌集中最多选择一个令牌

antlr4:如何从解析器规则中的令牌集中最多选择一个令牌,antlr4,Antlr4,我正在为一种语言创建一个antlr4语法,该语言具有多种变量声明前缀的可能性,例如,变量声明可以是以下任意一种: IDENTIFIER PREFIX1 IDENTIFIER PREFIX2 IDENTIFIER PREFIX1 PREFIX2 IDENTIFIER PREFIX2 PREFIX1 IDENTIFIER 前缀是可选的,可以按任何顺序排列,但最多一个 如果我有一个规则: var_declaration: (PREFIX1 | PREFIX2)? IDENTIFIER; 然后它将不

我正在为一种语言创建一个antlr4语法,该语言具有多种变量声明前缀的可能性,例如,变量声明可以是以下任意一种:

IDENTIFIER
PREFIX1 IDENTIFIER
PREFIX2 IDENTIFIER
PREFIX1 PREFIX2 IDENTIFIER
PREFIX2 PREFIX1 IDENTIFIER
前缀是可选的,可以按任何顺序排列,但最多一个

如果我有一个规则:

var_declaration: (PREFIX1 | PREFIX2)? IDENTIFIER;

然后它将不处理任何前缀或处理任何一种类型的前缀。如何处理none、one或两者的顺序,但防止两个前缀相同?

没有特殊的语法。您将拥有定义所有备选方案的权限:

var_declaration
 : PREFIX1 PREFIX2 IDENTIFIER
 | PREFIX2? PREFIX1? IDENTIFIER
 ;
如果有两个以上的前缀,列出它们将变得冗长。在这种情况下,最好将其中任何一个匹配零次或多次:

var_declaration
 : prefix* IDENTIFIER
 ;

prefix
 : PREFIX1
 | PREFIX2
 | PREFIX3
 ;
然后在解析之后(使用树侦听器)检查匹配的前缀是否唯一

相关问答: