rebol: Как создать правило для разбора скобок? - PullRequest
1 голос
/ 20 сентября 2009

Я действительно еще не освоил правило разбора:)

Как мне разобрать это?

to-parse: [entity Person {
    String name
    String lastName
    Address home
    Address business
}]

Это не работает:

entity-rule: ['entity word! #"{" to end]
>> parse to-parse entity-rule
== false
>>

Ответы [ 2 ]

5 голосов
/ 26 февраля 2013
to-parse: [entity Person {
    String name
    String lastName
    Address home
    Address business
}]

person-rule: [  
    thru "String " copy name to newline (append names name) thru newline |
    thru "Address " copy address to newline (append addresses address) thru newline |
    skip end
]

parse to-parse [ 
    'entity 'person 
    set details string! (
        names: copy [] addresses: copy []
        parse details [ some person-rule ]
    )
]

будет собирать имена в имена блоков, а адреса в адреса блоков. Этот ответ не работает в Rebol3, хотя. Не уверен, почему нет.

5 голосов
/ 21 сентября 2009

Третий элемент в вашем блоке to-parse не является символом {. Это строка - строки REBOL можно обозначить "..." или {...}

type? to-parse/3
== string!
to-parse/3
{
   String name
   String lastName
   Address home
   Address business
}

Чтобы успешно проанализировать блок, вам нужно найти строку:

entity-rule: ['entity word! string! to end]
parse to-parse entity-rule
== true
...