我正在ANTLR4
中构建语法,并且我得到此警告
TL4.g4:224:12: greedy block ()* contains wildcard; the non-greedy syntax ()*? may be preferred
下面是它指向
的那行代码block
: ( statement | functionDecl )* (Return expression ';')?
;
这个警告是什么意思,我怎样才能纠正它
该警告告诉您块()*
是贪婪的,这意味着它将尝试匹配statement
或functionDec1
的最大出现次数,这取决于情况,可能不是您所期望的。
将其更改为()*?
使其非贪婪,正如警告所建议的那样。这意味着它将匹配statement
或functionDec1
的最小出现次数。
带字符串的表达式示例:
样本:
foofoobar
foobarbar
foofoobarbarbar
表达式:
(foo|bar)*bar
将给出结果:
foofoobar
foobarbar
foofoobarbarbar
表达式:
(foo|bar)*?bar
将给出结果:
foofoobar
foobar
foofoobar
对于最后一个,结果将停止在第一个bar