匹配可选元素序列中的至少一个元素(ANTLR)

Match at least one element in sequence of optional elements (ANTLR)

让我们考虑以下 ANTLR4 语法(最小示例):

grammar Foo;

expr
   : a? b? c?
   ;

如何指定 abc 中的至少一个 必须出现在 [=15= 中]?

基本上我正在寻找以下内容的较短版本:

grammar Foo;

expr
   : a
   | b
   | c
   | a b
   | a b c
   | b c
   | c
   ;

是否有更简单的方法可以直接在语法中实现,或者我需要在解析后检查 AST?

不像假设的“至少一个”运算符那么简单,但比您提出的解决方案更简单:

expr
   : a b? c?
   | b c?
   | c
   ;

至少,nn的产物,而不是2<sup>n</sup>−1作品。