Parseur général

Soyez le premier à donner votre avis sur cette source.

Vue 5 801 fois - Téléchargée 421 fois

Description

C'est un parseur général et simple qui permet de calculer une expression quelconque avec les opérateurs et fonctions qu'on choisit en gérant la priorité des opérateurs. les types de variables utilisés dans les expressions sont quelconques (void*) et l'allocation est dynamique . il est possible de le changer de manière à obtenir ce qu'on veut . par exemple on pourrait l'utiliser pour faire un calcul numérique comme on pourrait l'utiliser pour dessiner une fonction en écrivant l'expression avec des "x".

Utilisation & Explications : Regarder l'exemple
(Il y a un fichier Makefile pour la compilation linux et un fichier de projet de Dev-c++ pour la compilation pour windows)

(il y a un deuxième exemple qui utilise SDL et SDL_gfx pour tracer des fonctions , il fonctionne mais il doit être amélioré)

C'est la première version du parseur , j'attend vos critiques/remarques pour l'améliorer.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
2
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
3 janvier 2010

Merci saros pour tes idées qui ont permis d'améliorer certains points :

Ajout d'une sorte de compilation qui traduit les chaines de caractères en arbre pret a etre utilisé - Ajout des fonctions avec plusieurs variables - Ajout d'un preprocesseur qui traite les chaines avant qu'elles soient compilées - Correction de quelques bugs - Affichage des fonctions 2D avec l'exemple 2 : utilise SDL , SDL_ttf , SDL_image et SDL_gfx
Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010

Ton code a l'air puissant.

Mes connaissance dans ce domaine du C/C++ sont limitées, mais je pense que tu dois pouvoir te débrouiller pour gérer un nombre quelconque de variables dans tes fonctions, sans devoir prévoir à l'avance ce nombre dans ta fonction Add_To_TSymbole. Ça permettrait de définir des fonctions genre somme(expr, var, debut, fin), min(e1,e2,e3,...) etc

Autrement je vois pas beaucoup d'applications non-mathématiques, c'est dommage car j'imagine que ce genre de code peut s'adapter à plein de domaines. C'est dans un cadre scolaire/professionnel que tu l'as programmé ?

Petites remarques sur le code :
Dans mdcparseur.c,
L111 tu écris "char *tmp = exp;"
puis L128 "tmp = exp;" ce qui est redondant.
L112 tu initialises index et pas index_symb, alors que tu pourrais très bien n'initialiser aucun des deux, c'est un peu maladroit.
Dans ta fonction STRNSTR, tu prends en paramètre "int n" et tu ne l'utilises pas.
Un moment il y a une variable que tu appelles exp. C'est le même nom que la fonction "exp" de la librairie cmath, il y a peut-être un risque de confusion.
De manière générale tes noms de variables sont pas très parleurs, c'est pas très agréable de te relire.

Le reste j'ai pas trop regardé en détail... mais je me pose 2 questions
- Est-ce qu'on peut programmer avec ton parseur un programme qui afficher une expression mathématique en 2D à l'écran ? ça peut être cool
- J'ai l'impression (encore une fois, je ne fais que survoler le code) que ton programme évalue directement sur la chaine caractères qu'on lui donne en entrée. Je pense que ce serait beaucoup plus flexible si ton parseur transformait simplement la chaîne en arbre, dont les éléments seraient les opérateurs et les opérandes, et que la fonction évalue opérait directement sur l'arbre. En particulier, ça donnerait un code qui pourrait facilement faire de la dérivation formelle par exemple, ou de la "simplification" d'expressions, ou bien simplement l'affichage de formules comme je l'ai proposé plus haut.

Voilà voilà... J'aime beaucoup, je pense que ça pourra être utile à beaucoup de gens.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.