示例#1
0
文件: Cadena.cs 项目: KevinR16/Parser
        /*
         * Metodo que se encarga de transformar la cadena inicial,
         * remplaza todas las variables de la cadena a valores
         * que se pasan por una lista
         */
        public string transformarCadena(List <string> varval, Coleccion coleccion)
        {
            int indexOfVar = 0;

            string[] cadenaTrans = varval.ToArray();
            //Se recorre el arreglo de la cadena principal
            for (int x = 0; x < cadenaTrans.Length; x++)
            {
                //Si una variable de la cadena principal esta en la lista de variables
                indexOfVar = coleccion.IndexOf(cadenaTrans[x]);
                if (indexOfVar >= 0)
                {
                    //Buscamos que no este entre comillas dobles, ya que entonces se trata de una constante cadena
                    if ((x - 1) >= 0 && (x + 1) < cadenaTrans.Length && cadenaTrans[x - 1] == "\"" && cadenaTrans[x + 1] == "\"")
                    {
                        continue;
                    }
                    //Si esta entre comilla simple entonces debe ser una variable de tipo String
                    if ((x - 1) >= 0 && (x + 1) < cadenaTrans.Length && cadenaTrans[x - 1] == "'" && cadenaTrans[x + 1] == "'")
                    {
                        cadenaTrans[x] = coleccion.ObtenerCadena(cadenaTrans[x]);
                    }
                    //Si no entonces es una variable de tipo numerico
                    else
                    {
                        cadenaTrans[x] = coleccion.ObtenerEntero(cadenaTrans[x]).ToString();
                    }
                }
                else
                {
                    Debug.WriteLine("No existe valor para una variable");
                }
            }
            return(String.Join("", cadenaTrans));
        }
示例#2
0
        static void Main(string[] args)
        {
            string trans  = "";
            string cadena = "";

            //cadena = "var1-var2+\"var2\"-\"var1\"*54/'var6'";
            //cadena = "fav2+fav3/34+xcv23*rev1+rev1+xc-rev1fav3";
            //cadena = "(x = 1 + 21 * y / 3000) / (variable + variable)";
            //cadena = "52+\"var2\"";
            cadena = "var1 = var2 + var3";
            //cadena = "var1 = var2 + 'var2'";
            //cadena = "xx=65&&(variable1+variable2)=x/y";
            //cadena = "(xx23v+var2/34)||(65&&(variable1+variable1/23*ram243)=(x/y))";
            //cadena = "SELECT * \"FROM\" 'tabla' WHERE 'idTabla' = 'valor'+24-32/var2-\"var2\" * 'var2'";
            //cadena = "'var1 ' + 57 ";
            List <String> varval = new List <string>();
            //List<string> variables = new List<string>();
            Coleccion     variables = new Coleccion();
            List <string> remplazos = new List <string>();

            Cadena classCadena = new Cadena(cadena);

            Console.WriteLine("Cadena inicial: \n" + cadena + "\n");

            //Separa la cadena en variables, valores y operadores
            varval = classCadena.splitVariablesOperadores();

            //Separa las variables del resto de la cadena
            variables = classCadena.comprobarVariableValor(varval);

            variables.InsertarEntero("var1", 1);
            variables.InsertarEntero("var2", 2);
            variables.InsertarEntero("var2", 3);

            Console.WriteLine("\n");

            //Retorna la cadena transformada
            trans = classCadena.transformarCadena(varval, variables);
            Console.WriteLine("Cadena Transformada");
            Console.WriteLine(trans);

            Console.ReadKey();
        }
示例#3
0
文件: Cadena.cs 项目: KevinR16/Parser
        /*
         * Metodo que recibe una lista y compara cada elemento para conocer si es una variable o un valor
         * para despues guardar cada una de las variables en una nueva lista.
         */
        public Coleccion comprobarVariableValor(List <string> varval)
        {
            Coleccion     coleccion = new Coleccion();
            int           num       = 0;
            string        cad       = "";
            List <string> variables = new List <string>();

            for (int x = 0; x < varval.Count; x++)
            {
                if (varval[x] != "(" && varval[x] != ")" &&
                    varval[x] != " " && varval[x] != "'" && varval[x] != "\"" &&
                    varval[x] != "+" && varval[x] != "-" &&
                    varval[x] != "*" && varval[x] != "/" &&
                    varval[x] != "=" && varval[x] != "&&" && varval[x] != "||")
                {
                    if (!int.TryParse(varval[x], out num))
                    {
                        //si no es el ultimo valor de la lista
                        if ((x + 1) < varval.Count && (x - 1) >= 0)
                        {
                            //Si esta entre comillas entonces no es una variable, es una cadena
                            if (varval.ElementAt(x - 1) == "\"" && varval.ElementAt(x + 1) == "\"")
                            {
                                continue;
                            }
                            //Si esta entre comillas simples, entonces es una variable de tipo string
                            else if (varval.ElementAt(x - 1) == "'" && varval.ElementAt(x + 1) == "'")
                            {
                                coleccion.Agregar(varval[x], cad.GetType());
                                continue;
                            }
                        }
                        //No es un numero entonces es una cadena(variable) que tampoco esta entre comillas simple, entonces
                        //es una variable de tipo numerico
                        coleccion.Agregar(varval[x], num.GetType());
                    }
                }
            }
            return(coleccion);
        }