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 :

Parseur C++ dans du C++


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut Parseur C++ dans du C++
    Bonjour,

    Je voulais savoir s'il existait un parseur C++ qui permet de prendre du code C++ sous forme de caratère et le transformer en fonction C++ dynamiquement

    en gros j'ai un programme P
    avec en entrer une fonction (écrite en C++)
    en sortie un calcule fait à partir de cette fonction.

    je veux donc faire P(f(g)) sachant que je ne connais pas g au moment de la compilation.
    Précisions g est une fonction mathématique mais utilisant des objets non standard (autre que des entier, réels et caractères).
    Sachant que les objets manipulé par g sont défini dans P.

    J'espère être suffisament claire

    PS : il me semble qu'une fonction semblable existe en javascript ou php

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Il n'y a rien en standard pour ça en C++. De plus, le langage C++ est assez peu adapté au parsing à l'exécution, vu qu'il s'agit d'un langage entièrement compilé. Il est plutôt conseillé d'utiliser un langage interprété ou semi-interprété pour ce que tu cherches à faire. La plupart des langages de scripts répondent à ce critère, c'est pourquoi tu peux trouver des interpréteurs de script pour C++.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mars 2009
    Messages : 31
    Par défaut
    Hello,

    On pourrait faire ce genre de chose en :
    • écrivant un fichier cpp avec la fonction en question,
    • compilant le fichier en une dll,
    • et finalement en chargeant la dll dynamiquement.

    (à condition d'avoir un compilateur sous la main)

  4. #4
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    boost::spirit te permet de créer des parseurs.

    Mais il faut quand même que tu crées un parseur qui implémente la grammaire et la sémantique, et c'est pas chose facile pour un langage comme le C++.

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2007
    Messages : 373
    Par défaut
    Si tu comptes utiliser un langage de script, je te conseille Lua pour sa syntaxe très proche du C/C++.

  6. #6
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    +1 pour lua, avec luabind, c'est que du bonheur.

    Sinon si il faut vraiment que ce soit du c++, je ne vois que la méthode de remy72, en compilant une dll et en liant dynamiquement.

  7. #7
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut
    Oui, tout doit être en C++,
    et compiler dynamiquement une bibliothèque n'est pas un peu long ?

  8. #8
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Ben oui, c'est long et ça nécessite qu'un compilo soit installé. Mais si tu veux vraiment du C++, tu n'as pas le choix.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  9. #9
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut
    Je vais créer un parseur d'expression arithmétique qui utilise mes objets pour les variables et constantes.

  10. #10
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut
    J'avais lu un article la dessus il y a un moment. C'etait sur la library blitz je crois.

  11. #11
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut
    Une petite lib avec lex et yacc suffirons amplement

  12. #12
    Alp
    Alp est déconnecté
    Expert confirmé

    Avatar de Alp
    Homme Profil pro
    Inscrit en
    Juin 2005
    Messages
    8 575
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2005
    Messages : 8 575
    Par défaut
    Mais Boost.Spirit est fait pour ça.
    Tu aurais ainsi ton parseur et tu peux ensuite constituer ton AST et "l'interpréter".

  13. #13
    Membre expérimenté Avatar de vikki
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    292
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Mai 2007
    Messages : 292
    Par défaut
    Tu peux peut etre utiliser boost.python. Le langage utiliser sera donc du python (mais c'est peut etre pas ce que tu veux), et il est ensuite facile de creer un object c++, de le manipuler via python et de le recuperer ensuite

  14. #14
    Membre averti
    Inscrit en
    Avril 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 14
    Par défaut
    <Troll> : Le python c'est nul.
    <\Troll>

    Sinon est-il possible d'utiliser Lex/Yacc en prenant non pas en entrée l'entrée standard (ou un fichier mais c'est pareil) mais une chaine de caractère (char *) ?

Discussions similaires

  1. [DOM] caractère > dans parseur DOM
    Par solika dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/05/2013, 13h45
  2. instancier le parseur xml dans ma servlet
    Par hlaura dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 25/07/2006, 23h55
  3. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39
  4. faire un selection dans une image aves les APIs
    Par merahyazid dans le forum C++Builder
    Réponses: 3
    Dernier message: 30/04/2002, 10h44
  5. Documentation DirectX dans C++Builder 3
    Par srvremi dans le forum DirectX
    Réponses: 1
    Dernier message: 26/04/2002, 09h59

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