Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/04/2010, à 09:22

omc

C++ math parser

Bonjour,
J'aurais besoin d'une lib pouvant traiter des expressions régulières et retourner des fonctions mathématiques à la manières des "interpréteurs de calculatrices".
Sur le net je suis tomber sur ça :
http://www.codeproject.com/KB/recipes/M … arser.aspx
http://www.bestcode.com/html/math_parser_for_cpp.html

Quelqu'un a-t-il utilisé l'un de ces composant, ou une librairie similaire ?
Je n'aime pas trop intégrer des librairies sans être sur de leurs performance/robustesse...


Si vous avez des idées... Merci !
Damien.

Hors ligne

#2 Le 28/04/2010, à 10:18

Le Farfadet Spatial

Re : C++ math parser

Salut à tous !

   Non, je ne connais pas les deux bibliothèques dont tu parles, cela ne m'a pas l'air très libre (pas du tout pour la deuxième).

   Pour ma part, j'aurais plutôt tendance à utiliser Giac. Voir la méthode d'installation sous Ubuntu.

   À bientôt.

   Le Farfadet Spatial

Hors ligne

#3 Le 28/04/2010, à 10:20

rniamo

Re : C++ math parser

si tu peux développer (=programmer wink) tu peux utiliser flex et yacc pour faire ton interpréteur.


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#4 Le 28/04/2010, à 10:33

Le Farfadet Spatial

Re : C++ math parser

Salut à tous !

rniamo a écrit :

tu peux utiliser flex et yacc pour faire ton interpréteur.

Oui, mais enfin : dès que l'on commence à vouloir faire un peu de calcul formel, ça devient vite compliqué, alors autant utiliser une bibliothèque qui existe déjà et qui est bien faite. Par exemple, Giac.

   À bientôt.

   Le Farfadet Spatial

Hors ligne

#5 Le 28/04/2010, à 10:49

rniamo

Re : C++ math parser

c'est sûr mais ça dépend du besoin ...

sinon il y a http://muparser.sourceforge.net/mup_interface.html


< Quelques un des mes programmes  | Cuisine Facile (pour les gourmands) | Fast MVC for PHP >
        \   ^__^
         \  (o o)\_______
            (___)\            )\

Hors ligne

#6 Le 28/04/2010, à 11:39

omc

Re : C++ math parser

Merci,

Non, je ne connais pas les deux bibliothèques dont tu parles, cela ne m'a pas l'air très libre (pas du tout pour la deuxième).

hop ! poubelle !

Pour ma part, j'aurais plutôt tendance à utiliser Giac

C'est du lourd...
Va falloir bosser.

tu peux utiliser flex et yacc pour faire ton interpréteur.

Là aussi c'est du lourd...

sinon il y a http://muparser.sourceforge.net/mup_interface.html

Je prendrais plutot boost::regex vu que ma lib est déjà dépendante de boost...

En tout cas merci pour vos conseils,
@ bientôt !

Dernière modification par omc (Le 28/04/2010, à 11:39)

Hors ligne

#7 Le 28/04/2010, à 14:22

Le Farfadet Spatial

Re : C++ math parser

Salut à tous !

omc a écrit :

Je prendrais plutot boost::regex vu que ma lib est déjà dépendante de boost...

De toute façon, Boost est indispensable. Après, le problème de Boost.Regex, c'est que ce n'est pas plus particulièrement dédié aux expressions mathématiques : à voir avec ce que tu dois faire, peut-être qu'il te faudra faire un travail relativement important.

   À bientôt.

   Le Farfadet Spatial

Hors ligne

#8 Le 29/04/2010, à 13:25

jofab

Re : C++ math parser

Le Farfadet Spatial a écrit :

De toute façon, Boost est indispensable

wink

Le Farfadet Spatial a écrit :

Salut à tous !

omc a écrit :

Je prendrais plutot boost::regex vu que ma lib est déjà dépendante de boost...

De toute façon, Boost est indispensable. Après, le problème de Boost.Regex, c'est que ce n'est pas plus particulièrement dédié aux expressions mathématiques : à voir avec ce que tu dois faire, peut-être qu'il te faudra faire un travail relativement important.

   À bientôt.

   Le Farfadet Spatial

Une expression math ne peut pas etre traite avec une reg exp (une expression math n'est pas un langage régulier).

C'est toutefois pas trop complx à faire soit meme : soit avec une petite grammaire LL1 on n'ecrit à la main un parseur en tres peu de temps (moins d'une heure) soit avec un parseur LR (et la il faut un truc comme bison et flex (lex et yacc)).

Dernière modification par jofab (Le 29/04/2010, à 13:27)

Hors ligne

#9 Le 29/04/2010, à 14:35

Le Farfadet Spatial

Re : C++ math parser

Salut à tous !

jofab a écrit :

Une expression math ne peut pas etre traite avec une reg exp (une expression math n'est pas un langage régulier).

C'est tout à fait juste. Cela dit, des expressions mathématiques (vraiment) très simples peuvent être traités avec une approche de type expression régulière. Toutefois :

C'est toutefois pas trop complx à faire soit meme : soit avec une petite grammaire LL1 on n'ecrit à la main un parseur en tres peu de temps (moins d'une heure) soit avec un parseur LR (et la il faut un truc comme bison et flex (lex et yacc)).

En effet. Cela dit, les choses peuvent devenir assez vite complexes, rien qu'avec des polynômes ça peut devenir un peu délicat.

   Tiens, ça fait longtemps que je n'ai pas donné de références livresques sur ce forum et c'est l'occasion de sortir de livres que je n'ai pas encore cité :

      Cours de calcul formel : Algorithmes fondamentaux
      Philippe SAUX PICART
      Ellipses

      Cours de calcul formel : Corps finis, systèmes polynomiaux - Applications
      Philippe SAUX PICART
      Ellipses

   Bien sûr, comme c'est un sujet proche :

      Compilateurs
      Dick GRUNE, Henri E. BAL, Ceriel J.H. JACOBS et Koen G. LANGENDOEN
      Dunod

   Cela dit, pourquoi ne pas utiliser un bibliothèque bien faite ?

   À bientôt.

   Le Farfadet Spatial

Dernière modification par Le Farfadet Spatial (Le 29/04/2010, à 14:37)

Hors ligne

#10 Le 30/04/2010, à 10:47

jofab

Re : C++ math parser

Le Farfadet Spatial a écrit :

Salut à tous !

jofab a écrit :

Une expression math ne peut pas etre traitee avec une reg exp (une expression math n'est pas un langage régulier).

C'est tout à fait juste. Cela dit, des expressions mathématiques (vraiment) très simples peuvent être traités avec une approche de type expression régulière.

Vraiment tres simple alors !
L'expression ne pourra par exemple pas contenir de parenthèses ! (ou éventuellement un nombre limité)

Le Farfadet Spatial a écrit :

En effet. Cela dit, les choses peuvent devenir assez vite complexes, rien qu'avec des polynômes ça peut devenir un peu délicat.

?

Hors ligne

#11 Le 30/04/2010, à 11:02

Le Farfadet Spatial

Re : C++ math parser

Salut à tous !

jofab a écrit :

Vraiment tres simple alors !

Oui.

Le Farfadet Spatial a écrit :

En effet. Cela dit, les choses peuvent devenir assez vite complexes, rien qu'avec des polynômes ça peut devenir un peu délicat.

?

Flûte : j'ai jeté un vieux code que j'avais fait pour gérer des fonctions polynomiales. Il faut dire que c'était un vrai bazar.

   À bientôt.

   Le Farfadet Spatial

Hors ligne

#12 Le 30/04/2010, à 12:12

jofab

Re : C++ math parser

Le Farfadet Spatial a écrit :

Salut à tous !

Le Farfadet Spatial a écrit :

En effet. Cela dit, les choses peuvent devenir assez vite complexes, rien qu'avec des polynômes ça peut devenir un peu délicat.

?

Flûte : j'ai jeté un vieux code que j'avais fait pour gérer des fonctions polynomiales. Il faut dire que c'était un vrai bazar.

Mais quel etait le pb ?

Hors ligne

#13 Le 30/04/2010, à 12:37

Le Farfadet Spatial

Re : C++ math parser

Salut à tous !

jofab a écrit :

Mais quel etait le pb ?

Ça fonctionnait, mais j'y avais passé beaucoup plus d'une heure : entre chercher la meilleure façon de le représenter en machine, la lecture de l'entrée de l'utilisateur, la façon de le traduire -- oui, en utilisant une grammaire régulière --, je me suis un peu arraché les cheveux. En fait, c'est juste ça que je voulais dire : on y arrive, mais ça peut devenir compliqué, alors autant utiliser une bibliothèque toute faite.

   Bon, je crois qu'on tourne un peu en rond, non ?

   À bientôt.

   Le Farfadet Spatial

Hors ligne

#14 Le 30/04/2010, à 15:03

jofab

Re : C++ math parser

Le Farfadet Spatial a écrit :

Salut à tous !

jofab a écrit :

Mais quel etait le pb ?

Ça fonctionnait, mais j'y avais passé beaucoup plus d'une heure : entre chercher la meilleure façon de le représenter en machine, la lecture de l'entrée de l'utilisateur, la façon de le traduire -- oui, en utilisant une grammaire régulière --, je me suis un peu arraché les cheveux. En fait, c'est juste ça que je voulais dire : on y arrive, mais ça peut devenir compliqué, alors autant utiliser une bibliothèque toute faite.

Tu me surprends ! il faut relire les references que tu donnes big_smile (c'est une blague, ne le prend pas mal).
En tout les cas, ce probleme se traite simplement par une grammaire context free (pas reguliere), un parseur (des plus classisques) et un arbre. Une autre strategie peut effectivement devenir casse figure. Apres si tu as bibliotheque qui le fait pour toi...

Le Farfadet Spatial a écrit :

Bon, je crois qu'on tourne un peu en rond, non ?

On a peut etre un peu glisse du sujet le long d'une courbe mais bon je ne sais pas si cette courbe rienvient sur elle meme au bout. (j'avais pas compris que tu avais attaqué tes polynomes avec une regexp)

Hors ligne

#15 Le 30/04/2010, à 16:00

Le Farfadet Spatial

Re : C++ math parser

Salut à tous !

jofab a écrit :

il faut relire les references que tu donnes big_smile (c'est une blague, ne le prend pas mal).

Je ne le prends pas mal, mais je vais venir te hanter et dévorer la nuit les biscuits de ton garde-manger -- hé oui, je suis membre du petit peuple, même d'outre-espace !

(j'avais pas compris que tu avais attaqué tes polynomes avec une regexp)

Non, l'idée ne m'est pas venue, mais lorsque Omc a dit qu'il voulait passer par là, je me suis dit : oui, bon, c'est possible, mais uniquement pour des formules très simple. Je l'ai mal dit.

   Pour mon vieux bout de code, aujourd'hui j'irais sans doute plus vite, avec le recul, mais tout de même, je ne dirais pas que c'est quelque chose de vraiment simple.

   Après, d'accord avec l'approche LL1 ou LR.

   À bientôt.

   Le Farfadet Spatial

Hors ligne