2010-02-02 18 views
4

J'ai une section d'un schéma pour un modèle que j'ai besoin d'analyser. Disons que cela ressemble à ceci.boost :: Spirit Grammar pour un schéma non trié

{ 
    type = "Standard"; 
    hostname="x.y.z"; 
    port="123"; 
} 

Les propriétés sont les suivantes:

  1. Les éléments peuvent apparaître non ordonnée.
  2. Tous les éléments qui font partie du schéma doivent apparaître, et aucun autre.
  3. Tous les attributs synthétisés des éléments entrent dans une structure.
  4. (facultatif) Le schéma pourrait à l'avenir dépendre du champ de type - c'est-à-dire, des champs différents en fonction du type - mais je ne suis pas concerné pour le moment. Selon les forums Spirit, la réponse est la suivante:
+0

"Seuls les éléments souhaités peuvent apparaître (spécifiés par des noms de type)": la valeur de la clé 'type' dicte quelles autres clés sont valides dans la section? –

+0

@Somebody: pas dans ce cas - mais c'est un bon point, et je pourrais bénéficier de ces idées - après tout type = "erlang" pourrait nécessiter plus que le nom d'hôte et le port. –

Répondre

4

Vous pouvez jeter un oeil à l'analyseur de permutation :

a^b^c 

Ce qui correspond a ou b ou c (ou une combinaison de ceux-ci ) dans un ordre quelconque.

Si l'objectif est d'analyser dans un struct, que la meilleure façon de tester la météo tous les membres essentiels ont été initialisés, les membres de la structure doivent être emballés avec boost::optional<> La présence d'attributs peuvent alors être facilement testé après l'analyse syntaxique au cours l'exécution.

+0

météo à savoir si – Viet