我正在 ANTLR4 中构建语法,并且收到此警告
TL4.g4:224:12: greedy block ()* contains wildcard; the non-greedy syntax ()*? may be preferred
这是它所指的代码行

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

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

最佳答案

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

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

带字符串的表达式示例:

sample :

foofoobar
foobarbar
foofoobarbarbar

表达:
(foo|bar)*bar

会给出结果:
foofoobar
foobarbar
foofoobarbarbar

表达:
(foo|bar)*?bar

会给出结果:
foofoobar
foobar
foofoobar

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

关于regex - 贪婪块 ()* 包含通配符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16549136/

10-13 05:55