Как смешать разбор строк и разбор блоков в одном правиле? - PullRequest
4 голосов
/ 18 июня 2011

Круто, что диалект Rebol PARSE достаточно обобщен, чтобы можно было сопоставлять и извлекать шаблоны из символических структур, а также из строк.Например:

; match a single "a" character, followed by any number of "b" chars
>> string-rule: ["a" some "b"]

>> parse "abb" string-rule
== true
>> parse "aab" string-rule
== false

; look for a single apple symbol, followed by any number of bananas
>> block-rule: ['apple some 'banana]

>> parse [apple banana banana] block-rule
== true
>> parse [apple apple banana] block-rule
== false

Но, скажем, я ищу блок, содержащий символ яблока, а затем любое количество строк символов, соответствующих string-rule:

; test 1
>> parse [apple "ab" "abbbbb"] mixed-rule
== true

; test 2
>> parse [apple "aaaa" "abb"] mixed-rule
== false

; test 3
>> parse [banana "abb" "abbb"] mixed-rule
== false

Какя бы сформулировал такой mixed-rule?Глядя на документацию, можно предположить, что можно использовать INTO:

http://www.rebol.net/wiki/Parse_Project#INTO

Казалось бы, естественный ответ не работает:

>> mixed-rule: ['apple some [string! into ["a" some "b"]]]

Пока он проходитtest 1 и правильно возвращает false для теста 3, неправильно возвращает true в тесте 2. Это моя ошибка или ошибка в Rebol (я использую r3 A111)?

1 Ответ

3 голосов
/ 18 июня 2011

Перейдите на форум REBOL3 предлагает следующее:

only the second string is checked.
Should be:
    ['apple some [and string! into ["a" some "b" ]]]
...