如何编写一个ANTLR规则,以任何顺序接受可选参数和必需参数的混合?
例如,有效查询可能看起来像function(a = 5, c = "foo", b = 21)
或function(b = 4, c = 5)
,其中a是可选的,但c和b是必需的。唯一有效的参数是a,b和c。
任何帮助都将不胜感激。
答案 0 :(得分:2)
这不是你在语法中定义的东西。语法只接受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
。这种语义检查不是在语法中定义的,而是在稍后阶段处理的。