贪心块()*包含通配符



我正在ANTLR4中构建语法,并且我得到此警告

TL4.g4:224:12: greedy block ()* contains wildcard; the non-greedy syntax ()*? may be preferred

下面是它指向

的那行代码
block
    : ( statement | functionDecl )* (Return expression ';')?
    ;

这个警告是什么意思,我怎样才能纠正它

该警告告诉您块()*是贪婪的,这意味着它将尝试匹配statementfunctionDec1的最大出现次数,这取决于情况,可能不是您所期望的。

将其更改为()*?使其非贪婪,正如警告所建议的那样。这意味着它将匹配statementfunctionDec1的最小出现次数。

带字符串的表达式示例:

样本:

foofoobar
foobarbar
foofoobarbarbar

表达式:

(foo|bar)*bar

将给出结果:

foofoobar
foobarbar
foofoobarbarbar

表达式:

(foo|bar)*?bar

将给出结果:

foofoobar
foobar
foofoobar

对于最后一个,结果将停止在第一个bar

相关内容

  • 没有找到相关文章

最新更新