以下警告:
规则包含一个可选块,其中至少有一个可以匹配空字符串的可选块。示例:Oracle中的row_limiting_clause,其中offset_clause和fetch_clause都是可选的
row_limiting_clause : offset_clause? fetch_clause? ;
答案 0 :(得分:0)
您不能禁止此类警告,应该将其视为严重警告。即使ANTLR4可以从此语法中生成有效的ATN,它也可能会根据输入内容做出意外的决定。
相反,请尝试修复语法部分。该警告与以下内容有关:
2019-12-18T08:18:39.126Z
您在这里看到的是规则a: b?;
b: c? d?;
c: 'C';
d:'D';
不仅在整体上是可选的,而且其所有部分都是可选的。这有点重复了可选性。您可以改写b
,而无需更改此语法所解析的语言。
答案 1 :(得分:0)
我建议对您的语法进行以下更改:
row_limiting_clause : offset_clause? | offset_clause fetch_clause? ;
如果row_limitic_clause
确实是可选的,请在使用row_limitic_clause?
的任何地方使用。
这将意味着row_limiting_clause仅在存在offset_clause
和/或fetch_clause
时才匹配。