Treetopでこのようなことをするにはどうすればよいですか?
/.+?;/
唯一の方法は次のようです。
[^;]+ ';'
どちらが醜いですか..他の方法はありますか? .+?
動作しないようです..
PEG はデフォルトで貪欲でブラインドです。つまり、PEG は可能な限り多くの入力を消費し、その後に何が来るかを考慮しません。
S <- P1* P2
(貪欲、盲目)
これは、順序付けられた選択を利用することで(そして先読みを使用せずに)、かなり簡単に修正できます。
S <- P1 S / P2
(貪欲、非盲目)
S <- P2 / P1 S
(怠け者、盲目ではない)
ええと、私は PEG が貪欲であり、それを回避する方法がないことを学びました。ただし、先読みを使用してこの動作を模倣できます。!(';' .)
私はTreetopを知りませんが、/[^;]+;/
動作しますか?
簡単な検索から、Treetop は貪欲な量指定子も怠惰な (貪欲でない) 量指定子も実行せず、+
実際には所有量指定子 (++
他の正規表現では で表される) であるという提案がありました。
この場合、否定されたクラス以外の正規表現ベースのオプションがあるかどうかはわかりません。