antlr4:如何从解析器规则中的令牌集中选择每个令牌中的至少一个

时间:2019-05-06 17:54:39

标签: antlr4

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

IDENTIFIER
PREFIX1 IDENTIFIER
PREFIX2 IDENTIFIER
PREFIX1 PREFIX2 IDENTIFIER
PREFIX2 PREFIX1 IDENTIFIER

和前缀是可选的,并且可以以任何顺序使用,但每个前缀最多使用一个。

如果我有规则:

var_declaration: (PREFIX1 | PREFIX2)? IDENTIFIER;

然后将不处理任何类型的单个前缀或单个前缀。如何处理无序,无序或无序但又防止两个前缀相同?

1 个答案:

答案 0 :(得分:1)

没有特殊的语法。您将定义所有替代方案:

var_declaration
 : PREFIX1 PREFIX2 IDENTIFIER
 | PREFIX2? PREFIX1? IDENTIFIER
 ;

如果前缀超过2个,列出它们将变得冗长。在这种情况下,最好将其中任何一个匹配零次或多次:

var_declaration
 : prefix* IDENTIFIER
 ;

prefix
 : PREFIX1
 | PREFIX2
 | PREFIX3
 ;

,然后在分析后(使用树侦听器)检查匹配的前缀是否唯一。

相关问答:In ANTLR, is there a shortcut notation for expressing alternation of all the permutations of some set of rules?