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

警告は、ブロックが貪欲であることを示しています。つまり、状況に応じて、または()*の最大出現数に一致させようとすることを意味します。statementfunctionDec1

警告で示唆されているように、それを変更すると()*?貪欲ではなくなります。これは、statementorの最小オカレンスに一致することを意味しfunctionDec1ます。

文字列を使用した式の例:

サンプル:

foofoobar
foobarbar
foofoobarbarbar

表現:

(foo|bar)*bar

結果が得られます:

foofoobar
foobarbar
foofoobarbarbar

表現:

(foo|bar)*?bar

結果が得られます:

foofoobar
foobar
foofoobar

最後のものについては、結果は最初で止まりますbar

于 2013-05-14T17:29:24.917 に答える