我正在用ANTLR4构建一个语法,我得到了这个警告
TL4.g4:224:12: greedy block ()* contains wildcard; the non-greedy syntax ()*? may be preferred
下面是它引用的代码行
block
: ( statement | functionDecl )* (Return expression ';')?
;警告是什么意思,我如何纠正它?
发布于 2013-05-15 01:29:25
警告是告诉您块()*是贪婪的,这意味着它将尝试匹配statement或functionDec1的最大出现次数,根据情况,这可能不是您所期望的。
将其更改为()*?将使其不贪婪,正如警告所建议的那样。这意味着它将匹配statement或functionDec1的最小出现次数。
带有字符串的表达式示例:
示例:
foofoobar
foobarbar
foofoobarbarbar表达式:
(foo|bar)*bar将给出结果:
foofoobar
foobarbar
foofoobarbarbar表达式:
(foo|bar)*?bar将给出结果:
foofoobar
foobar
foofoobar对于最后一个,结果将在第一个bar处停止
https://stackoverflow.com/questions/16549136
复制相似问题