-
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
-
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++.
-
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)
-
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++.
-
Si tu comptes utiliser un langage de script, je te conseille Lua pour sa syntaxe très proche du C/C++.
-
+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.
-
Oui, tout doit être en C++,
et compiler dynamiquement une bibliothèque n'est pas un peu long ?
-
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.
-
Je vais créer un parseur d'expression arithmétique qui utilise mes objets pour les variables et constantes.
-
J'avais lu un article la dessus il y a un moment. C'etait sur la library blitz je crois.
-
Une petite lib avec lex et yacc suffirons amplement
-
Mais Boost.Spirit est fait pour ça.
Tu aurais ainsi ton parseur et tu peux ensuite constituer ton AST et "l'interpréter".
-
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
-
<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 *) ?