如何抑制antlr4中生成的语法警告

如何抑制antlr4中生成的语法警告,antlr4,Antlr4,警告如下: 规则包含一个可选块,其中至少有一个可选块可以匹配空字符串。示例:Oracle中的row_limiting_子句,其中offset_子句和fetch_子句都是可选的 你不能压制这样的警告,你应该认真对待它们。即使ANTLR4可以从该语法生成有效的ATN,它也可能根据输入做出意外的决定 相反,试着修正语法部分。警告是关于以下内容的: a: b?; b: c? d?; c: 'C'; d:'D'; 您在这里看到的是,规则b不仅作为一个整体是可选的,而且它的所有部分也是可选的。这有点重复了

警告如下:

规则包含一个可选块,其中至少有一个可选块可以匹配空字符串。示例:Oracle中的row_limiting_子句,其中offset_子句和fetch_子句都是可选的


你不能压制这样的警告,你应该认真对待它们。即使ANTLR4可以从该语法生成有效的ATN,它也可能根据输入做出意外的决定

相反,试着修正语法部分。警告是关于以下内容的:

a: b?;
b: c? d?;
c: 'C';
d:'D';

您在这里看到的是,规则
b
不仅作为一个整体是可选的,而且它的所有部分也是可选的。这有点重复了可选性。你可以写
a:b我建议您对语法进行以下更改:

row_limiting_clause : offset_clause? | offset_clause fetch_clause? ;
如果
row\u limitic\u子句
确实是可选的,请在任何地方使用
row\u limitic\u子句?


这意味着,行限制子句将仅在存在
offset\u子句
和/或
fetch\u子句
时匹配

没有必要使row_limitic_子句成为可选的,因为它可能已经不匹配任何内容。
row_limiting_clause : offset_clause? | offset_clause fetch_clause? ;