private static elementoVariable evaluarAsignacion(List <elementoToken> tokens)
        {
            elementoVariable variable      = new elementoVariable();
            string           valorGuardado = "";

            for (int i = 1; i < tokens.Count; i++)
            {
                if (Regex.IsMatch(tokens[i].getNombre(), "\"[^\"]*\""))
                {
                    valorGuardado = tokens[i].getNombre();
                    tokens[i].setNombre("\"" + 1 + "\"");
                }

                if (Regex.IsMatch(tokens[i].getNombre(), "\'[^\']\'"))
                {
                    valorGuardado = tokens[i].getNombre();
                    tokens[i].setNombre("\'" + 1 + "\'");
                }
            }

            for (int i = 0; i < tokens.Count; i++)
            {
                if (tokens[i].getNombre().Contains("\"") || tokens[i].getNombre().Contains("\'"))
                {
                    tokens[i].setNombre(valorGuardado);
                }
            }

            variable = generarVariableAsignacion(tokens);

            return(variable);
        }
        private static elementoVariable generarVariableAsignacion(List <elementoToken> tokens)
        {
            elementoVariable variable = new elementoVariable();

            string auxiliarValor      = "";
            string auxiliarNombre     = "";
            int    posicionAsignacion = 0;
            bool   asignacionEspecial = false;
            bool   operacionSimple    = false;
            string fragmentoOperacion = "";

            for (int i = 0; i < tokens.Count; i++)
            {
                if (tokens[i].getNombre().Equals("="))
                {
                    posicionAsignacion = i;
                }

                if (tokens[i].getNombre().Equals("+=") || tokens[i].getNombre().Equals("-=") || tokens[i].getNombre().Equals("*=") || tokens[i].getNombre().Equals("/=") || tokens[i].getNombre().Equals("%="))
                {
                    posicionAsignacion = i;
                    asignacionEspecial = true;
                    fragmentoOperacion = tokens[i].getNombre().Substring(0, 1);
                }

                if (tokens[i].getNombre().Equals("++") || tokens[i].getNombre().Equals("--"))
                {
                    posicionAsignacion = i;
                    operacionSimple    = true;
                    fragmentoOperacion = tokens[i].getNombre().Substring(0, 1);
                }

                if (posicionAsignacion != 0)
                {
                    i = tokens.Count;
                }
            }

            if (asignacionEspecial == true)
            {
                for (int i = 0; i < posicionAsignacion; i++)
                {
                    auxiliarNombre = auxiliarNombre + " " + tokens[i].getNombre();
                }

                auxiliarValor = auxiliarNombre + " " + fragmentoOperacion;

                for (int i = posicionAsignacion + 1; i < tokens.Count - 1; i++)
                {
                    auxiliarValor = auxiliarValor + " " + tokens[i].getNombre();
                }
            }
            else if (operacionSimple == true)
            {
                for (int i = 0; i < posicionAsignacion; i++)
                {
                    auxiliarNombre = auxiliarNombre + " " + tokens[i].getNombre();
                }

                auxiliarValor = auxiliarNombre + " " + fragmentoOperacion + " 1";
            }
            else
            {
                for (int i = 0; i < posicionAsignacion; i++)
                {
                    auxiliarNombre = auxiliarNombre + " " + tokens[i].getNombre();
                }

                for (int i = posicionAsignacion + 1; i < tokens.Count - 1; i++)
                {
                    auxiliarValor = auxiliarValor + " " + tokens[i].getNombre();
                }
            }

            variable = new elementoVariable("", auxiliarNombre.Replace(" ", ""), auxiliarValor, tokens[0].getLinea());

            return(variable);
        }
        private static elementoVariable generarVariableDeclaracion(List <elementoToken> tokens, int inicio, int final)
        {
            elementoVariable variable     = new elementoVariable();
            string           tipoEsperado = tokens[0].getNombre();
            List <string>    ids          = new List <string>();

            int  contadorCorchetes  = 0;
            bool contieneAsignacion = false;
            int  posicionAsignacion = 0;

            for (int i = inicio; i < final; i++)
            {
                if (tokens[i].getNombre().Equals("["))
                {
                    contadorCorchetes++;
                }

                if (tokens[i].getTipo().Equals("id"))
                {
                    ids.Add(tokens[i].getNombre());
                }

                if (tokens[i].getNombre().Equals("="))
                {
                    contieneAsignacion = true;
                    posicionAsignacion = i;
                    i = final;
                }
            }

            if (contadorCorchetes == 2)
            {
                if (contieneAsignacion == true)
                {
                    string auxiliarValor = "";

                    for (int i = posicionAsignacion + 1; i < final; i++)
                    {
                        auxiliarValor = auxiliarValor + " " + tokens[i].getNombre();
                    }
                    variable = new elementoVariable(tipoEsperado + "[][]", ids[0].Replace(" ", ""), auxiliarValor, tokens[0].getLinea());
                }
                else
                {
                    variable = new elementoVariable(tipoEsperado + "[][]", ids[0].Replace(" ", ""), "", tokens[0].getLinea());
                }
            }
            else if (contadorCorchetes == 1)
            {
                if (contieneAsignacion == true)
                {
                    string auxiliarValor = "";

                    for (int i = posicionAsignacion + 1; i < final; i++)
                    {
                        auxiliarValor = auxiliarValor + " " + tokens[i].getNombre();
                    }
                    variable = new elementoVariable(tipoEsperado + "[]", ids[0].Replace(" ", ""), auxiliarValor, tokens[0].getLinea());
                }
                else
                {
                    variable = new elementoVariable(tipoEsperado + "[]", ids[0].Replace(" ", ""), "", tokens[0].getLinea());
                }
            }
            else
            {
                if (contieneAsignacion == true)
                {
                    string auxiliarValor = "";

                    for (int i = posicionAsignacion + 1; i < final; i++)
                    {
                        auxiliarValor = auxiliarValor + " " + tokens[i].getNombre();
                    }
                    variable = new elementoVariable(tipoEsperado, ids[0].Replace(" ", ""), auxiliarValor, tokens[0].getLinea());
                }
                else
                {
                    variable = new elementoVariable(tipoEsperado, ids[0].Replace(" ", ""), "", tokens[0].getLinea());
                }
            }

            return(variable);
        }