2009-09-22 4 views
0

Это прекрасно работает (благодаря предложению Сунанда в How can I parse [a/b] ? syntax error in Rebol?):Rebol правило синтаксического анализа с созданием письма/глубокими и присоединять функции

attribute: copy [] 
class: copy [] 
definition-rule: compose/deep [some [set class word! 'is 'defined 'by 
[some [copy attribute to (to-lit-word "/") thru (to-lit-word "/") ]] 
copy attribute to end]] 
parse [Customer is defined by First Name/Last Name/Email] definition-rule 

, но теперь мне нужно добавить некоторые инструкции Append (добавить выходной класс) и не работать больше:

attribute: copy [] 
class: copy [] 
definition-rule: compose/deep [some [set class word! (append output class) 'is 'defined 'by 
[some [copy attribute to (to-lit-word "/") thru (to-lit-word "/") ]] 
copy attribute to end]] 
parse [Customer is defined by First Name/Last Name/Email] definition-rule 
+0

Хорошо, посмотрим, снова ответит ли Саннанда. Я не совсем понимаю, почему учебник задает вопросы, но я готов ошибаться. –

+0

Я рад ответить на вопросы REBOL (если я знаю ответ) на любом форуме, на котором заданы вопросы REBOL. Использование сообщества Stackoverflow сообщества REBOL пока невелико - в основном, RebolTutorial задает вопросы, и несколько человек (в основном я до сих пор) отвечаю. Если это создает проблемы для всех, то Reboltutorial может переключиться на один из REBOL-специфических форумов для своей поддержки Q & A. – Sunanda

ответ

1

проблема здесь состоит в том, что составляют ест все выражения в скобках. Вы довольны тем, что съели (to-lit-word "/"), но вы серьезно не хотите, чтобы он съел (добавьте выходной класс), потому что это предназначено для parse диалект.

Существует, вероятно, умней подход, но это должно работать: удалить сочинить, делая LIT-слова работы вне правила синтаксического анализа ...

attribute: copy [] 
class: copy [] 
output: copy "" 
fs: to-lit-word "/" ;; define a forward slash lit-word 

definition-rule: [ 
    some [set class word! (append output class) 'is 'defined 'by [ 
     some [copy attribute to fs thru fs] 
    ] 
    copy attribute to end] 
    ] 

parse [Customer is defined by First Name/Last Name/Email] definition-rule 
== true 

Я не совсем уверен, что вы пытаетесь сделать с этим кодом, но вы хотите, чтобы извлечь набор атрибутов в конце, а затем рассмотреть это изменение:

attribute: copy [] 
attributes: copy [] 
class: copy [] 
output: copy "" 
fs: to-lit-word "/" ;; define a forward slash lit-word 

definition-rule: [ 
    some [set class word! (append output class) 'is 'defined 'by [ 
     some [copy attribute to fs thru fs (append/only attributes attribute)] 
    ] 
    copy attribute to end (append/only attributes attribute)] 
    ] 

parse [Customer is defined by First Name/Last Name/Email] definition-rule 

print ["==" class mold attributes] 

== Customer [[First Name] [Last Name] [Email]] 
+0

Спасибо большое, мне нужен второй пример для этого: атрибут: скопировать [] класс: копия [] фс: в освещенном-слово «/» выход: копия «» определение-правила : [ некоторые [комплект класс слово! (append output join class "|") 'is' defined 'by [ some [copy attribute to fs thru fs (append output join attribute ";")] ] атрибут копирования для завершения (добавить атрибут вывода)] ] parse [Customer определяется по имени/фамилии/электронной почте] определение-правило вывод зонда –

0

Я перепечатывать код в комментариях, как это не может быть прочитано, ш Я хотел сделать именно это:

attribute: copy [] 
class: copy [] 
fs: to-lit-word "/" 
output: copy "" 


definition-rule: [ 
    some [set class word! (append output join class "|") 'is 'defined 'by [ 
     some [copy attribute to fs thru fs (append output join attribute ";")] 
    ] 
    copy attribute to end (append output attribute)] 
] 

parse [Customer is defined by First Name/Last Name/Email] definition-rule 
probe output 

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

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