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

时间:2015-06-18 20:45:40

标签: antlr antlr4

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

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

任何帮助都将不胜感激。

1 个答案:

答案 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。这种语义检查不是在语法中定义的,而是在稍后阶段处理的。