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
。此类语义检查未在语法中定义,而是在稍后阶段处理。
我如何编写一个 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
。此类语义检查未在语法中定义,而是在稍后阶段处理。