: je recherche un évaluateur de formule mathématique en C :
on passerait en argument une chaîne de caractère, ex. "3.2 + 3*5^1", et il en resortirait un float, dans ex. "18.2"
Merci d'avance
: je recherche un évaluateur de formule mathématique en C :
on passerait en argument une chaîne de caractère, ex. "3.2 + 3*5^1", et il en resortirait un float, dans ex. "18.2"
Merci d'avance
salut,
il faut décomposer la chaîne de caractères nombre par nombre et isoler les signes puis les convertir en float atof <stdlib.h>
C'est un peu court jeune homme, on aurrait pu dire en somme bien des choses... etcEnvoyé par cmarsc
Si j'ai écrit une calto : HaypoCALC.
Pour écrire une calto il faut :
- Un format de stockage de donnée. J'ai choisi l'arbre n-aire avec une notation pré-fixée. Explication sur :
http://www.haypocalc.com/prog/expression.php
- Un analyseur lexical qui va découper "3.2 + 3*5^1" en :
REAL = 3.2
OP = opADD
INT = 3
OP = opMUL
INT = 5
OP = opPOW
INT = 1
J'ai choisi la méthode "tout réécrire à la main". C'est pas mal, mais il faut bcp de temps pour l'écrire. Le mieux est d'utiliser Lex ou Flex.
Tu peux déjà éliminer plusieurs erreurs à ce stade : deux nombres qui se suivent, deux opérateurs qui se suivent, etc.
- Un analyseur syntaxique qui traduire ce qu'à compris l'analyseur lexicale en une expression dans le format qui tu auras choisis. En arbre n-aire ça donne : (+ 3.2 (* 3 (^ 5 1))).
J'ai aussi tout écrit à la main, mais Yacc ou Bison font l'affaire.
- Une fonction qui va évaluer cette expression. Si tu te limites aux opérateurs de calcul simple (+ - * / ^), c'est vite écrit. Pour a^b, prend la fonction pow de math.h.
Info : Lex et Yacc ne sont pas libre, Flex et Bison le sont.
Envoie-moi un p'tit mail si tu veux + d'info !!!
@+ Haypo
Tu as aussi Coco/R. Je suis entrain de me familiariser avec:
Je le trouve bien car il combine les fonctionnalitées de Lex et Yacc et il est assez simple d'utilisation. J'arrive déjà à identifier différents types de valeurs dans un fichier texte (float, hexa, decimal) et ça ne fait pas longtemps que je me suis mis (2h, le temps de comprendre un peu).Coco/R is a tool for generating compilers/interpreters. Instead of writing your scanner and parser all by yourself, you write a grammar expressed in augmented EBNF and Coco/R generates a scanner and parser for you. Coco/R combines the functionality of the well-known tools lex and Yacc, to form an extremely easy to use compiler generator. There are versions of Coco/R for C, C++, Java, Oberon, Pascal, ...
Pour Haypo, pourquoi tu as tout réécrit à la main ? C'est parce que Bison et Flex t'obligeait à faire des applications gratuites, du fait de leurs licences ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager