4

Treetopでこのようなことをするにはどうすればよいですか?

/.+?;/

唯一の方法は次のようです。

[^;]+ ';'

どちらが醜いですか..他の方法はありますか? .+?動作しないようです..

4

3 に答える 3

11

PEG はデフォルトで貪欲でブラインドです。つまり、PEG は可能な限り多くの入力を消費し、その後に何が来るかを考慮しません。

S <- P1* P2(貪欲、盲目)

これは、順序付けられた選択を利用することで(そして先読みを使用せずに)、かなり簡単に修正できます。

S <- P1 S / P2(貪欲、非盲目)

S <- P2 / P1 S(怠け者、盲目ではない)

于 2010-02-08T22:01:45.073 に答える
1

ええと、私は PEG が貪欲であり、それを回避する方法がないことを学びました。ただし、先読みを使用してこの動作を模倣できます。!(';' .)

于 2009-07-03T05:26:22.593 に答える
0

私はTreetopを知りませんが、/[^;]+;/動作しますか?


簡単な検索から、Treetop は貪欲な量指定子も怠惰な (貪欲でない) 量指定子も実行せず、+実際には所有量指定子 (++他の正規表現では で表される) であるという提案がありました。

この場合、否定されたクラス以外の正規表現ベースのオプションがあるかどうかはわかりません。

于 2009-06-25T22:20:47.980 に答える