警告如下:
规则包含一个可选块,其中包含至少一个可以匹配空字符串的替代项。例 :row_limiting_clause 在 Oracle 中,offset_clause 和 fetch_clause 都是可选的
row_limiting_clause : offset_clause? fetch_clause? ;
你不能抑制这样的警告,你应该认真对待它们。尽管 ANTLR4 可以从此语法生成有效的 ATN,但它可能会做出意外的决定,具体取决于输入。
相反,请尝试修复语法部分。警告的内容如下:
a: b?;
b: c? d?;
c: 'C';
d:'D';
你在这里看到的是,规则b
不仅是整体可选的,而且它的所有部分都是可选的。这有点重复了可选性。您可以改为编写a: b;
,而无需更改使用此语法解析的语言。
我建议对你的语法进行以下更改:
row_limiting_clause : offset_clause? | offset_clause fetch_clause? ;
如果row_limitic_clause
确实是可选的,请在使用row_limitic_clause?
任何地方使用它。
这意味着row_limiting_clause只有在存在offset_clause
和/或fetch_clause
时才匹配。