Accueil > Forum > > > > parser une expression mathématique, de manière récursive ou itérative ?
parser une expression mathématique, de manière récursive ou itérative ?
mercredi 7 décembre 2011 à 18:20:56 |
parser une expression mathématique, de manière récursive ou itérative ?

mmaximum
|
Bonjour,
Je suis actuellement en train de programmer un petit CAS, qui devra tourné sur un système très réduit (calculatrice).
J'ai déjà crée toute la partie pour les structures de données pour l'arbre.
Pour faire simple, chaque opération, fonctions... est un n½ud. Certains n½uds peuvent avoir des enfants(opérations, fonctions...), d'autres non (constantes, variables...).
Mon problème maintenant, c'est la construction de l'arbre, et donc le parser d'expression mathématique.
J'avais commencé à écrire un modèle récursif, mais sur certains forums, j'ai vu que ce n'était pas l'optimal.
Donc, je voulais savoir comment on fait pour parser une expression mathématique de manière itérative, et non récursive, et si les gains au niveau de la pile valais le coup.
Aussi, quel est le meilleur modèle/la meilleur technique, pour pouvoir par la suite implémenter de nouvelles fonctions le plus simplement possible ?
Merci d'avance, mmaximum
|
|
jeudi 8 décembre 2011 à 08:07:34 |
Re : parser une expression mathématique, de manière récursive ou itérative ?
|
jeudi 8 décembre 2011 à 10:07:55 |
Re : parser une expression mathématique, de manière récursive ou itérative ?

CptPingu
|
Julien39 a raison, il n'y a aucun problème avec la récursivité. Itératif et récursif sont deux méthodes qui se valent toutes les deux. Choisi celle avec laquelle tu es le plus à l'aise. Avant de faire exploser ta pile, tu as quand même de la marge, je te conseil de ne pas trop te prendre la tête la dessus.
Aussi, quel est le meilleur modèle/la meilleur technique, pour pouvoir par la suite implémenter de nouvelles fonctions le plus simplement possible ?
La meilleur technique est celle du lexer-parser. Après tout une expression mathématique se représente facilement en expression BNF. Tu peux construire un AST (arbre de syntaxe abstrait). C'est la technique utilisée pour faire des compilateurs, évaluateurs, etc... Donc c'est extrêmement extensible. Néanmoins, ce n'est pas la technique la plus facile.
Tu as un exemple de construction d'un AST (avec une image) dans une de mes sources: http://www.cppfrance.com/codes/COMPILATEUR-PSEUDO-PASCAL_49318.aspx
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
jeudi 8 décembre 2011 à 20:34:59 |
Re : parser une expression mathématique, de manière récursive ou itérative ?

JulSoft
|
Néanmoins, ce n'est pas la technique la plus facile.
Oui et non... Je pensais effectivement que créer un lexer + parser ( + interpreteur, il faut quand même faire le calcul une fois, sinon quel intérêt?) était ultra compliqué...
J'ai eu un cours de compilation l'année passée, et je me suis rendu compte que c'est pas si tordu que ça...
Il faut juste un peu de rigueur.
En gros:
0) (pas obligatoire, pour des maths simples on doit pouvoir faire sans même s' ça peut VRAIMENT aider) Ecrire ta gramaire (BNF / EBNF): les règles de constructions de ton opération
1) faire un lexer qui découpe ta chaine en entrée en morceaux que tu peux reconnaitre (nombres, fonctions, operateurs, paranthèses, ...) qui définissent ta structure. C'est le plus compliqué.
2) Construire ton arbre. On l'avait fair de façon récurssive, c'est le plus simple à mon avis. Même en parsant un langage complet (du J0), on avait pas fait exploser la pile, t'as de la marge.
3) interpréter ton arbre. Là aussi, le plus simple est clairement le récurssif.
|
|
vendredi 9 décembre 2011 à 18:15:22 |
Re : parser une expression mathématique, de manière récursive ou itérative ?

mmaximum
|
Merci pour vos réponses.
Mais, quand vous parlez de créer un lexer-parser, vous me conseillez plutôt d'utiliser un truc du genre flex/bison, ou de créer mon propre lexer-parser ?
En effet, je crains que le système de lexer-parser soit trop lourd pour être supporté par une calculatrice (64Ko de ram, et l'exécutable ne doit pas être trop gros non plus (max 200Ko)).
Sinon, je pensais utiliser une syntaxe très simple, pour pouvoir être interprétée facilement.
Par exemple : 3a+#sin(x)
On met des # devant les fonctions, et les variables ne peuvent faire qu'un seul caractère.
|
|
vendredi 9 décembre 2011 à 18:26:09 |
Re : parser une expression mathématique, de manière récursive ou itérative ?

CptPingu
|
On met des # devant les fonctions, et les variables ne peuvent faire qu'un seul caractère.
Ça ne rend pas les choses forcément plus simples. Avec un bon lexer-parser tu es tranquille pour tout. Pas besoin de ce genre de bidouille.
vous me conseillez plutôt d'utiliser un truc du genre flex/bison, ou de créer mon propre lexer-parser ?
On parle bien de créer son propre lexer-parser.
je crains que le système de lexer-parser soit trop lourd pour être supporté par une calculatrice
C'est pas très lourd un lexer-parser, si bien fait. Tu peux mélanger lexer et parser, et ne pas construire d'arbre de syntaxe, vu que ta grammaire est très simple au final. Tu évalues au fur et à mesure (dès que tu as un noeud complet) en récursif.
________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
|
|
Cette discussion est classée dans : expression, parser, mathématique, récursive, manière
Répondre à ce message
Sujets en rapport avec ce message
Mathématique PARSER [ par flamgreg ]
Bonjour à tous, Je dévelloppe une application de comptabilité personnalisable et je dois dévelloper un module de formule de type IFcomme dans l'exempl
parser une expression [ par mathmax ]
Bonjour, J'aimerais parser une expression qui est une condition du langage de programmation CA-Clipper, ceci afin de la traduire en language SQL. En c
besoin d'aide pour une expression régulière [ par psgkiki ]
Bonjour a tous, Je suis entrain de faire un lex et un yacc et je cale sur une expression régulière. Je veux qu'il me renvoi le mot clé IDF à chaque fo
Parser avec description de format (xml) ? [ par RV2931 ]
Bonjour,Je dois réaliser quelques parsers de fichiers, notament un parser de fichiers DXF, et d'autres formats propriétaires...J'ai entendu parler que
Expression régulière POSIX abondante [ par sebclick ]
Bonjour,Je cherche à traiter un fichier XML par un programme C à l'aide d'expression régulière pour récupérer le texte contenu entre deux balises.Voic
besoin d'aide pour une fonction récursive [ par vinoth150 ]
bonjour a tout le monde voila j'ai besoin de vous pour une fonctiuon récursive :Ecrire une fonction récursive qui calcule a^b (a à la puissance b) ( a
Parser sous Visual C++ en application Smart Devices [ par Grotony2 ]
Bonjour à tous Je dois développer un projet tournant sur un Smartphone sous Windows Mobile, en C++. Pour cela j'utilise Visual C++ 2008 où je crée de
parser un fichier xml avec tinyxml [ par rabebs ]
Bonjour tout le monde Je cherche à récupérer des valeurs des balises se trouvant sous d'autres balises comme:<pre class="alt2" dir="ltr" style="border
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|