Пример #1
0
 public ExpresionFuncion(
     Expresion expresionMadre,
     ElementoFuncion funcion) : base(expresionMadre)
 {
     //logger.Info("Inicio Expresion Funcion");
     this.Funcion    = funcion;
     this.argumentos = new List <Expresion>();
     //logger.Info("Fin Expresion Funcion");
 }
Пример #2
0
        public Elemento ProximoElemento()
        {
            //logger.Info("Inicio Proximo Elemento");
            Elemento elemento = null;

            string token = string.Empty;
            char   caracter;

            string numeros = "0123456789.";

            string operadoresNumericos = "+-*/^%";
            string operadoresLogicosDeDosCaracteres     = "|&=!";
            string operadoresLogicosDeUnoODosCaracteres = "<>";
            string operadoresLogicos =
                operadoresLogicosDeDosCaracteres +
                operadoresLogicosDeUnoODosCaracteres;
            string operadores =
                operadoresNumericos +
                operadoresLogicos;

            string agrupadores = "()";
            string caracteres  = "abcdefghijklmnopqrstuvwxyz";
            string separadores = ",";

            if (this.indice == this.formula.Length)
            {
                return(elemento);
            }

            caracter = this.formula[this.indice];

            token += caracter;

            this.indiceAnterior = this.indice;

            this.indice++;

            if (numeros.Contains(caracter))
            {
                if (this.indice < this.formula.Length)
                {
                    caracter = this.formula[indice];
                    while (numeros.Contains(caracter) && this.indice < this.formula.Length)
                    {
                        token += caracter;
                        this.indice++;
                        if (this.indice < this.formula.Length)
                        {
                            caracter = this.formula[indice];
                        }
                    }
                }

                elemento = new ElementoNumerico(token);
            }
            else if (caracteres.Contains(caracter))
            {
                if (this.indice < this.formula.Length)
                {
                    caracter = this.formula[indice];
                    while (caracteres.Contains(caracter) && this.indice < this.formula.Length)
                    {
                        token += caracter;
                        this.indice++;
                        if (this.indice < this.formula.Length)
                        {
                            caracter = this.formula[indice];
                        }
                    }
                }

                elemento = ElementoFuncion.GetFuncion(token);
            }
            else if (operadoresNumericos.Contains(caracter))
            {
                elemento = ElementoOperador.GetOperador(token);
            }
            else if (operadoresLogicos.Contains(caracter))
            {
                if (this.indice < this.formula.Length)
                {
                    if (operadoresLogicosDeDosCaracteres.Contains(caracter))
                    {
                        caracter = this.formula[indice];
                        token   += caracter;
                        this.indice++;
                    }
                    else if (operadoresLogicosDeUnoODosCaracteres.Contains(caracter))
                    {
                        caracter = this.formula[indice];
                        if (caracter == '=')
                        {
                            token += caracter;
                            this.indice++;
                        }
                    }
                }

                elemento = ElementoOperador.GetOperador(token);
            }
            else if (agrupadores.Contains(caracter))
            {
                elemento = new ElementoAgrupador(token);
            }
            else if (separadores.Contains(caracter))
            {
                elemento = new ElementoSeparador(token);
            }
            else
            {
                //logger.Error("Caracter no esperado: '" + caracter + "'");
                throw new InvalidOperationException("Caracter no esperado: '" + caracter + "'");
            }



            //logger.Info("Fin Proximo Elemento");
            return(elemento);
        }