PARSEUR GÉNÉRAL

Messages postés
921
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
23 septembre 2010
- - Dernière réponse : mehdicherti
Messages postés
2
Date d'inscription
lundi 19 décembre 2005
Statut
Membre
Dernière intervention
3 janvier 2010
- 3 janv. 2010 à 16:15
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49102-parseur-general

Afficher la suite 
mehdicherti
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
Saros
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.