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

C++ Discussion :

Parser. Comment faire ?


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 356
    Par défaut Parser. Comment faire ?
    Bonjour à tous.
    Avoir lu les différents sujets sur les parseurs ne m'a pas réellement aidé pour mon problème. Voici globalement l'objectif.

    Créer une fonction ayant pour prototype :
    std::pair<SomeFunctor,bool> Parse(const std::string& expression);

    L'opérator () de SomeFunctor est du type :

    bool SomeFunctor::operator()(const Color& c);

    Voici les mots clés pouvant être contenus dans la chaine :

    "(", ")", "or", "and","not", "r", "v", "b", "=", "!=", "<", ">", "<=", ">=", "=<", "=>", "&", "|","!",...

    Et la fonction pourrait parser par exemple :


    r<=100 & (!(v<200) | b>150)
    r<=100 and (not(v<200) or b>150) Ce qui revient au même.
    et même

    r and b >100 or v<50 Ce que n'autoriserait pas notre compilateur par exemple.

    Le foncteur renvoyé est tel que l'opérator () du foncteur renvoit true si la couleur respecte la chaine et false sinon. Le bool de la pair permet d'indiquer si le parsing a échoué.

    Je ne sais même pas par ou commencer (je ne voit même pas à quoi ressemble mon SomeFunctor).

    Spirit est-il intéressant ici ?
    Si il faut l'écrire à la main, quelques idées ?

    L'objectif est que l'opérator() du SomeFunctor soit le plus rapide possible.

    Merci à tous.

  2. #2
    Membre Expert
    Avatar de Joel F
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Septembre 2002
    Messages
    918
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2002
    Messages : 918
    Par défaut
    spirit oui, ca te permettrait d'associer a chaque sous-fonction un objet fonction et de créer un fusion::vector de ces derniers et de leurs arguments. EN fin de parsing un appel via operator() suffirait.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1 415
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2007
    Messages : 1 415
    Par défaut
    Salut

    Citation Envoyé par NoIdea Voir le message
    Spirit est-il intéressant ici ?
    Oui Spirit est intéressant, mais attention au coût d'apprentissage (qui n'est pas si costaud que ça soit dit en passant). Attention au temps de compilation du parseur car c'est un template saturé de surcharge d'opérateurs qui masque un peu le volume réel de code compilé. Mais on s'en sort très bien avec un peu d'astuce.

    Je suppose que tu as déjà jeté un oeil à mon code si tu as lu les sujets.

    Citation Envoyé par NoIdea Voir le message
    Si il faut l'écrire à la main, quelques idées ?
    Tu peux regarder le code de Jean-Marc ici.

Discussions similaires

  1. Réponses: 16
    Dernier message: 03/05/2012, 14h22
  2. [Parser] [Débutant] Comment faire !
    Par enigma dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 23/02/2005, 01h57
  3. Réponses: 8
    Dernier message: 18/09/2002, 03h20
  4. Comment faire pour mettre l'ecran en veille ?
    Par March' dans le forum MFC
    Réponses: 6
    Dernier message: 29/08/2002, 14h25
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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