如何禁止显示 antlr4 中生成的语法警告



警告如下:

规则包含一个可选块,其中包含至少一个可以匹配空字符串的替代项。例 :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时才匹配。

相关内容

  • 没有找到相关文章

最新更新