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"); }
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); }