0

タグの階層セットを解析する必要があるとしましょう

<tag>
<subtag1 attr1=value1 attr2=value2>
<subtag1 attr1=value1 attr2=value2>
<subtag1 attr1=value1 attr2=value2>
</tag>

一部またはいずれかの内部でブレークを使用して、レベル階層から抜け出せないのはなぜですか? これにより、頭を悩ませる代わりに、そのような解析を行うことができますか?

ここでhttp://www.codecious.com/rebol/parse-tutorial.htmlを読むと、無限ループが作成されるため、これを求めています

この場合、無限ループが発生します。BREAK は、SOME が処理しているルールのサブルール内にあるためです。BREAK は、成功/失敗のステータスや入力ポインターには影響しません。ルールを早期に終了するだけです。

rule-to-break: [(print " Break ") break] == [(print " Break ") break] parse "X" [some [rule-to-break] "X"] Break Break ... Break Break(エスケープ)

4

1 に答える 1

2

それはRebol 2で無限ループを引き起こします、あなたは正しいです。parseただし、ユーザーからのフィードバックに基づいて、最新バージョンで大幅なアップグレードと改訂が行われたことを忘れないでください。

したがって、Rebol 3 では次のようになります。

>> rule-to-break: [(print "Break") break] 
== [(print "Break") break]

>> parse "X" [some [rule-to-break] "X"]
Break
== true

Carl は、R3 ブログで Rebol 3 のブレーク動作のニュアンスについて少し書いています。

http://www.rebol.net/r3blogs/0277.html

  • fail : 1 つのルールを明示的に失敗させ、次の選択肢 (ある場合) にスキップします。
  • break : ルール ブロック全体を明示的に終了し、すべての選択肢をスキップします。
  • return : すべてのルールを明示的に終了し、解析関数から戻ります。

Rebol 2は、この時点で石になっています。それを修正するためにどれだけの作業が行われるかには限界があります。Rebol 3 ですべての例をテストする必要があります。

于 2010-03-16T21:10:20.343 に答える