コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        //---------------------------------------------------------
        //|  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);
        }
コード例 #4
0
        /// <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);
        }
コード例 #5
0
        /// <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);
        }