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