Question

Cela fonctionne très bien (grâce à la suggestion de Sunanda Comment puis-je analyser [a / b] erreur de syntaxe dans 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

mais je dois maintenant ajouter quelques instructions append (joindre la classe de sortie) et il ne fonctionne pas plus:

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
Était-ce utile?

La solution

Le problème ici est que le Nouveau est de manger toutes les expressions entre parenthèses. Vous êtes heureux pour qu'il puisse manger les (à mot allumé « / ») , mais vous ne voulez pas sérieusement manger (ajouter la classe de sortie) parce que c'est destiné à l'analyse syntaxique dialecte.

Il y a probablement une approche plus intelligente, mais cela devrait fonctionner: enlever le en faisant le mot allumé de travail en dehors de la règle d'analyse syntaxique Nouveau ...

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

Je ne suis pas tout à fait sûr de ce que vous essayez de faire avec ce code, mais que vous voulez extraire l'ensemble des attributs à la fin, il faut considérer ce changement:

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]]

Autres conseils

republier code commentaire car il est illisible, ce que je voulais faire était ce exactement:

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top