2010-03-16 6 views
0

Пусть говорят, что я должен разобрать иерархический набор теговParse and Break: почему break нельзя использовать для выхода из «любого» или «некоторого» правила?

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

Почему я не могу использовать перерыв внутри некоторых или любой, чтобы выйти из уровня иерархии? Это позволит сделать такой синтаксический анализ вместо того, чтобы иметь головную боль, чтобы сделать это?

Я спрашиваю это потому, что я прочитал здесь http://www.codeconscious.com/rebol/parse-tutorial.html было бы создать бесконечный цикл

Этот случай дает бесконечный цикл. Поскольку BREAK находится в пределах подчиненного правила, которое обрабатывает НЕКОТОРЫЙ. BREAK не влияет на успех статус/отказа или входной указатель - это просто выходит из правила рано:

правило на разрыв: [(печать "Перерыв") перерыв] == [ (печать "перерыв") перерыв] синтаксического анализа "X" [некоторые [правила до разрыва] "X"] перерыв перерыв ... перерыв Перерыв (побег)

ответ

2

Это дает бесконечный цикл в Rebol 2, вы правы. Но помните, что parse подвергся серьезным обновлениям и пересмотрам в самой последней версии, основанной на отзывах пользователей.

Так в Rebol 3, вы получите:

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

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

Карл написал немного о нюансах поведения излома у REBOL 3 Scandinavia на блоге R3:

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

  • строя : явно не удается выполнить одно правило, перейдите к следующей альтернативе (если она есть).
  • break: явно выйдите из всего блока правил, пропустите все альтернативы.
  • return: явно выйти из всех правил, вернуться из функции синтаксического анализа.

Rebol 2 - это отборный камень в этой точке; есть ли ограничения в том, как много работы будет сделано, чтобы исправить это. Вы должны проверить все свои примеры в Rebol 3.

+0

Я попытался установить Rebol 3. Дома он работает, в корпоративной клиентской среде это не так. Итак, я попробовал что-то еще, и снова ударился о стену: http://stackoverflow.com/questions/2463412/i-thought-this-parsing-would-be-simple –

 Смежные вопросы

  • Нет связанных вопросов^_^