匹配可选元素序列中的至少一个元素(ANTLR)
Match at least one element in sequence of optional elements (ANTLR)
让我们考虑以下 ANTLR4 语法(最小示例):
grammar Foo;
expr
: a? b? c?
;
如何指定 a
、b
或 c
中的至少一个 必须出现在 [=15= 中]?
基本上我正在寻找以下内容的较短版本:
grammar Foo;
expr
: a
| b
| c
| a b
| a b c
| b c
| c
;
是否有更简单的方法可以直接在语法中实现,或者我需要在解析后检查 AST?
不像假设的“至少一个”运算符那么简单,但比您提出的解决方案更简单:
expr
: a b? c?
| b c?
| c
;
至少,n
是n
的产物,而不是2<sup>n</sup>−1
作品。
让我们考虑以下 ANTLR4 语法(最小示例):
grammar Foo;
expr
: a? b? c?
;
如何指定 a
、b
或 c
中的至少一个 必须出现在 [=15= 中]?
基本上我正在寻找以下内容的较短版本:
grammar Foo;
expr
: a
| b
| c
| a b
| a b c
| b c
| c
;
是否有更简单的方法可以直接在语法中实现,或者我需要在解析后检查 AST?
不像假设的“至少一个”运算符那么简单,但比您提出的解决方案更简单:
expr
: a b? c?
| b c?
| c
;
至少,n
是n
的产物,而不是2<sup>n</sup>−1
作品。