IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Boost C++ Discussion :

Boost::Spirit : Comment fonctionne assign_a ?


Sujet :

Boost C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Boost::Spirit : Comment fonctionne assign_a ?
    Bonjour à tous,

    J'essaie actuellement de créer un parseur en utilisant Boost::Spirit, mais je rencontre des problèmes pour récupérer la valeur d'un token matché. J'ai tenté d'utiliser la fonction assign_a pour affecter la valeur à un string pour l'utiliser ensuite, mais ça ne semble pas marcher.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    struct Grammar : public boost::spirit::grammar<Grammar>
    {
      template <typename ScannerT>
      struct definition
      {
        std::string s;
        definition (Grammar const&)
        {
          string = ('"' >> *(boost::spirit::anychar_p - '"')
                    >> '"');
          tag_value = string
            [boost::spirit::assign_a (s)]
            [boost::bind (&load::id, s)];
        }
      };
    };
    avec load::id qui ne fait que afficher s.

    Quelqu'un pourrait m'éclairer sur la marche à suivre pour récupérer la valeur du string en question ?

    Merci d'avance.

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    Essaye :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    boost::bind (&load::id, boost::cref( s ) )
    MAT.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Merci pour la réponse

    Existe-il un moyen de passer directement la valeur de la règle matchée (ici string) plutôt que de devoir passer par des std::string intermédiaires ?

    Ici, cela ne pose pas de problème, mais dans des règles plus importantes, cela pourrait m'être utile.

  4. #4
    Membre expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Points : 3 266
    Points
    3 266
    Par défaut
    Salut,

    Ceci "devrait" marcher (je suppose que load::id est une méthode statique?) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tag_value = string[boost::bind (&load::id)(construct_<std::string>(arg1, arg2))]
    Edit: construct_ fait parti du module phoenix.

Discussions similaires

  1. Comment utiliser Boost::spirit ?
    Par kimels dans le forum Boost
    Réponses: 8
    Dernier message: 11/06/2008, 20h04
  2. Comment fonctionne TXmlDocumment ????
    Par almisuifre dans le forum C++Builder
    Réponses: 8
    Dernier message: 18/02/2005, 13h54
  3. comment fonctionne une interface graphique???
    Par elekis dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/10/2004, 00h10
  4. Comment fonctionne le ClassExplorer ?
    Par borisd dans le forum C++Builder
    Réponses: 7
    Dernier message: 30/09/2004, 18h44
  5. Comment fonctionne le CVS ?
    Par mathieu dans le forum CVS
    Réponses: 6
    Dernier message: 23/03/2004, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo