2009-06-25 5 views
2

私はTreetopでこれをどうすればできますか?Treetop/PEGで貪欲でないマッチング?

/.+?;/ 

唯一の方法が何をしているように思える:一種の醜いです

[^;]+ ';' 

..他の方法? .+?は動作していません。

+0

'parslet'には 'rule(:line){(str("; "))がありますか? >> any).repeat(1)>> str( ";")} '私はあなたの2番目のオプションと同じです。 –

答えて

0

私はTreetopを知らないが、/[^;]+;/は動作するのだろうか?クイック検索から


は、私は梢は貪欲や怠惰(非欲張り)数量詞をしないの提案を見て、 +こと(他の正規表現のフレーバーに ++によって表される)独占的量は実際にあります。

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

+0

'/ [^;] +; /'は、私の質問にあるように '[^;] + ';''と書かれています。しかし、私はより良い方法があることを望んでいた。 – cloudhead

1

私はPEGが欲張りであることを知りました。周りには方法がありません。

S <- P1* P2(貪欲:!(';' .)

9

PEGは、貪欲、デフォルトでは盲目であることは、彼らができるよう、彼らは同じくらいの入力を食べて、彼らはその後何が来るのか考えていないことのように先読みは、しかし、この動作を模倣するために使用することができます注文した選択肢(と先読みを使用しない)を利用しているが、固定かなり簡単にすることができ、ブラインド)

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

S <- P2/P1 S(怠け者、ノンブラインド)

関連する問題