2010-09-30 13 views
1

J'ai étendu l'exemple Mini XML à partir du manuel de l'esprit.
La grammaire décrit une balise xml qui peut être fermée avec '/>' et qui n'a pas de noeud fils ou qui est fermée comme dans l'exemple avec une balise fermante '' et qui peut éventuellement avoir des enfants. Est-il possible d'écrire cette règle sans la balise attr (Children())? Je pense que c'est plus ou moins un retard de performance. J'en ai besoin pour éviter l'attribut optionnel de l'analyseur alternatif. S'il n'y a pas de balises enfant, l'attribut ne doit être qu'un vecteur vide.Amélioration de l'utilisation de l'analyseur d'alternative

Répondre

1

Vous devriez être en mesure d'écrire:

xml %= startTag[_a = &_1] 
     >> attributes 
     >> ( "/>" >> eps 
      | ">" >> *node > endTag(*_a) 
     ) 
    ; 

Cela laisse le vecteur attribut inchangé (et vide).

+0

Désolé mais votre grammaire ne semble pas compiler. Je pense que c'est parce que ("/>" | ">" >> * node> endTag (* _ a)) génère un attribut optionnel mais mon membre 'childs' n'est pas un optionnel. J'ai ajouté la structure xmlTree dans la question. – MarcoH

+0

Je devrais voir un exemple minimal et autonome pour pouvoir voir ce qui ne va pas. – hkaiser

+0

J'ai ajouté un exemple dans la question. Il compile sur VS 2008 – MarcoH