Evaluer une expression à partir d'une chaine de caractère

Description

Cette Source est surtout un exercice de style. Elle permet d'évaluer une expression par exemple :
2 + 4 ou encore 2*5 = 10. Elle supporte les opérateurs suivants :
+,-,*,/, %(->modulo),^(->Puissance), &(->Concaténation) AINSI QUE LES OPERATEURS DE COMPARAISON SUIVANTS
=, <>,<,>, ||, &&. Elle gère l'ordre des parenthèses({,(,),}) ainsi que l'ordre d'exécution des expressions.

J'ai mis deux versions de la classe. Une qui utilise la fonction EVAL, et l'autre uniquement du PHP. Si vous trouvez une moyen d'optimiser ces class. Merci de me le faire savoir, je les utilise pour un moteur de template dans un de mes projets personels.

Source / Exemple :


<?php
	/*------------------------------------------------------------
						EXERCICE DE STYLE
	------------------------------------------------------------*/
	function calcul_execution() {
		list($msec, $sec) = explode(' ', microtime());
		return ((float) $sec + (float) $msec) * 1000000;
	}
	
	
	include("Class_Evaluer.php"); //N'utilise pas la méthode Eval
	//include("Class_EvaluerB.php"); //Utilise la méthode Eval
	
	
	function Evaluer_Chaine($Chaine){
		$test=new Evaluation();
		$tab=$test->Evaluer($Chaine);
		echo "-->Evaluation de la Chaine : <b>".$Chaine."</b><br />\r\n";
	
		if(is_bool($tab)){
			if($tab){
				echo "---->Résultat : <b>VRAI</b> <br />\r\n&nbsp;<br />\r\n";
			}else{
				echo "---->Résultat : <b>FAUX</b> <br />\r\n&nbsp;<br />\r\n";
			}
		}else{
			echo "---->Résultat : <b>".$tab."</b> <br />\r\n&nbsp;<br />\r\n";
		}
	}

	$debut_calcul = calcul_execution();
	
	 Evaluer_Chaine(" 4^2^3 ");
	 Evaluer_Chaine(" 4^2^3 -42 ");
	 Evaluer_Chaine(" 'Salut' & ' tout le monde c\\'est chouette hein ?'");
	 Evaluer_Chaine(" 1+(3+2)*5 = 26");
	 Evaluer_Chaine(" 6*6 > 35 && 2>3");
	 Evaluer_Chaine(" 6*6 > 35 || 2>3");
	 Evaluer_Chaine(" (9%2) = 1");
	
	$fin_calcul = calcul_execution();	
	echo '<br />Temps execution: ',($fin_calcul-$debut_calcul)/1000000,' secondes.<br></span></center>'; 
?>

Conclusion :


J'attends vos remarques d'amélioration ainsi que tout autre remarques constructive.

Codes Sources

A voir également

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.