Cette mini classe permet d'évaluer des expressions arithmétiques. Calcule sur des reels (double) et il y a que les opérations suivantes : plus,moins, multiplier,diviser,parentheses,sin,cos.
On peut aussi utiliser des variables
Se base sur la théorie des langages! utilise un analyseur syntaxique qui permet de calculer une expression a partir d'une grammaire.
Pour évaluer l'expression, on utilise une pile.
Voici la grammaire :
S' -> E
E -> TE'
E' -> +TE'
E' -> -TE'
E' -> $
T -> FT'
T' -> *FT'
T' -> /FT'
T' -> $
F -> id
F -> (E)
En modifiant légérement la grammaire on peut trés facilement gerer les nombres a virgules (voir dans la méthode F)
La grammaire et la source ont été inspirés du cours de M. Krajecki disponible a l'adresse suivante :
http://cosy.univ-reims.fr/~mkrajecki/enseignement/info62/info62Chap3.pdf
Source / Exemple :
//utilisation :
//on instancie
Evalueur e=new Evalueur();
//on évalue une expression
double r=e.evalue("2*5+10");
//le résultat n'est valable que si getErreur() ne renvoi pas d'erreur
if (e.getErreur()==Evalueur.NO_ERROR)
System.out.println("resultat : "+r);
else
System.out.println("Erreur de syntaxe");
NOUVEAU MAJ : on peut mettre des variables et utiliser des fonctions prédéfinies (sin et cos)
Pour evaluer une expression avec une variable :
e.addVar("x",5.0);
e.evalue("2.5*x");
Pour utiliser sin ou cos :
e.evalue("cos(2.0)");
e.evalue("cos(2.0*x+5.0)+2");
e.evalue("sin(2.0)");
NOUVEAU : Si l'expression ne change pas, on peut optimiser l'évaluation de l'expression avec reevalue :
-la 1ere fois, utiliser evalue pour calculer la formule (genere l'expression)
e.addVar("x",5.0);
e.evalue("cos(x)");
-ensuite, on peut utiliser reevalue qui rejoue la derniere expression mais en prenant compte tout de meme des variables modifiées :
e.addVar("x",15.0);
e.reevalue();
L'execution de reevalue est plus rapide que evalue car reevalue réutilise la pile de fonctions générée par evalue
Tout simplement! :)
Conclusion :
1) Je sais qu'une autre source pour évaluer des expression est disponible mais la mienne me parait interressante a publier aussi car elle montre l'utilisation de grammaire (utilisé pour faire par exemple des compilateur (c'est génial a faire ;) )). ça peut aider certain qui auront un point de départ pour comprendre les grammaires (ça peut aider en Master info par exemple!! lol)
2) Un exemple d'utilisation est inclus
Sous Windows, pour lancer le test : executez le script run.bat
executez compile.bat pour compiler les classes
En ligne de commande :
Pour executer : tapez java TestEvalueur
Pour compiler : tapez javac *.java
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.