3

我正在构建一个语法ANTLR4,我收到了这个警告

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

这是它所指的代码行

block
    : ( statement | functionDecl )* (Return expression ';')?
    ;

警告是什么意思,我该如何纠正?

4

1 回答 1

7

警告告诉您该块()*是贪婪的,这意味着它将尝试匹配最大出现次数,statement或者functionDec1根据情况可能不是您所期望的。

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

带字符串的表达式示例:

样品:

foofoobar
foobarbar
foofoobarbarbar

表达:

(foo|bar)*bar

会给出结果:

foofoobar
foobarbar
foofoobarbarbar

表达:

(foo|bar)*?bar

会给出结果:

foofoobar
foobar
foofoobar

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

于 2013-05-14T17:29:24.917 回答