ANTLR4 语法,它接受任意顺序的可选和必需参数列表

ANTLR4 grammar which accepts list of optional and required arguments in any order

我如何编写一个 ANTLR 规则来接受任意顺序的可选参数和必需参数的混合?

例如,有效查询可能类似于 function(a = 5, c = "foo", b = 21)function(b = 4, c = 5),其中 a 是可选的,但 c 和 b 是必需的。唯一有效的参数是 a、b 和 c。

如有任何帮助,我们将不胜感激。

这不是您要在语法中定义的内容。语法只接受 function(a = 5, c = "foo", b = 21)function(a = 5, c = "foo", i = 21)。解析输入后,您将在解析树的遍历中拒绝后一个示例。

例如,取一个Java assignment statement的BNF规范:

Expression: 
    Expression1 [AssignmentOperator Expression1]

其中 Expression1 很可能是定义如下的变量 Q

final int Q = 42;

换句话说:语句 Q = 123; 是非法的,因为它已经被定义 final。此类语义检查未在语法中定义,而是在稍后阶段处理。