我正在 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
的最少出现次数。
带字符串的表达式示例:
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/