で文法を作成してANTLR4
いますが、この警告が表示されます
TL4.g4:224:12: greedy block ()* contains wildcard; the non-greedy syntax ()*? may be preferred
これが参照しているコード行です
block
: ( statement | functionDecl )* (Return expression ';')?
;
警告はどういう意味ですか? どうすれば修正できますか?
警告は、ブロックが貪欲であることを示しています。つまり、状況に応じて、または()*
の最大出現数に一致させようとすることを意味します。statement
functionDec1
警告で示唆されているように、それを変更すると()*?
貪欲ではなくなります。これは、statement
orの最小オカレンスに一致することを意味しfunctionDec1
ます。
文字列を使用した式の例:
サンプル:
foofoobar
foobarbar
foofoobarbarbar
表現:
(foo|bar)*bar
結果が得られます:
foofoobar
foobarbar
foofoobarbarbar
表現:
(foo|bar)*?bar
結果が得られます:
foofoobar
foobar
foofoobar
最後のものについては、結果は最初で止まりますbar