/// <summary> /// Analyse d'une somme /// --------------------------------------------------------- /// | Somme ::= Prod '+' Somme | Prod '-' Somme | Prod /// | Analyse des additions et des soustractions /// --------------------------------------------------------- /// </summary> /// <returns></returns> private IElementCalcul LitSomme() { IElementCalcul eltGauche; IElementCalcul eltDroit; IElementCalcul retour = null; eltGauche = LitProd(); if (_tokenCourant.TypeToken == ENTypeToken.ENPlus) // addition { LitTokenSuivant(); eltDroit = LitSomme(); retour = new ElementCalculFBinaire(eltGauche, new FonctionBinaire((double a, double b) => a + b), eltDroit); } else if (_tokenCourant.TypeToken == ENTypeToken.ENMoins) // soustraction { LitTokenSuivant(); eltDroit = LitSomme(); retour = new ElementCalculFBinaire(eltGauche, new FonctionBinaire((double a, double b) => a - b), eltDroit); } else { retour = eltGauche; } return(retour); }
/// <summary> /// Prod ::= Elem '*' Prod | Elem '/' Prod | Elem | /// Analyse des multiplications et des divisions /// </summary> /// <returns></returns> private IElementCalcul LitProd() { IElementCalcul eltGauche; IElementCalcul eltDroit; IElementCalcul retour = null; eltGauche = LitElem(); if (_tokenCourant.TypeToken == ENTypeToken.ENMultiplication) { LitTokenSuivant(); eltDroit = LitProd(); retour = new ElementCalculFBinaire(eltGauche, new FonctionBinaire((double a, double b) => a * b), eltDroit); } else if (_tokenCourant.TypeToken == ENTypeToken.ENDivision) { LitTokenSuivant(); eltDroit = LitProd(); retour = new ElementCalculFBinaire(eltGauche, new FonctionBinaire((double a, double b) => a / b), eltDroit); } else { return(eltGauche); } return(retour); }
//--------------------------------------------------------- //| Somme ::= Prod '+' Somme | Prod '-' Somme | Prod //| Analyse des additions et des soustractions //--------------------------------------------------------- private IElementCalcul LitSomme() { IElementCalcul eltGauche; IElementCalcul eltDroit; IElementCalcul retour = null; eltGauche = LitProd(); if (mTokenCourant == "+") // addition { LitToken(); eltDroit = LitSomme(); retour = new ElementCalculFBinaire(eltGauche, new fonctionBinaire(Adition), eltDroit); } else if (mTokenCourant == "-") // soustraction { LitToken(); eltDroit = LitSomme(); retour = new ElementCalculFBinaire(eltGauche, new fonctionBinaire(Soustraction), eltDroit); } else { retour = eltGauche; } return(retour); }
/// <summary> /// Prod ::= Elem '*' Prod | Elem '/' Prod | Elem | /// Analyse des multiplications et des divisions /// </summary> /// <returns></returns> private IElementCalcul LitProd() { IElementCalcul eltGauche; IElementCalcul eltDroit; IElementCalcul retour = null; eltGauche = LitElem(); if (mTokenCourant == "*") { LitToken(); eltDroit = LitProd(); retour = new ElementCalculFBinaire(eltGauche, new fonctionBinaire(Multiplication), eltDroit); } else if (mTokenCourant == "/") { LitToken(); eltDroit = LitProd(); retour = new ElementCalculFBinaire(eltGauche, new fonctionBinaire(Division), eltDroit); } else { return(eltGauche); } return(retour); }
/// <summary> /// Visit d'un ElementCalculFBinaire /// </summary> /// <param name="elt"></param> void IVisiteurIElement.Visit(ElementCalculFBinaire elt) { double valeurgauche, valeurDroit; elt.ElementGauche.Accept(this); valeurgauche = _valeurCourante; elt.ElementDroit.Accept(this); valeurDroit = _valeurCourante; _valeurCourante = elt.Fonction(valeurgauche, valeurDroit); }