Пример #1
0
        public List <string> ValidacionesTokens(string cadena)
        {
            SpecialCharacters specialCharacters = new SpecialCharacters();

            newstring += cadena;
            string respuesta = string.Empty;
            string nombre = string.Empty;
            string Content = string.Empty; bool terminar = false;

            if (!newstring.Contains("TOKEN") && !newstring.Contains(siguiente))
            {
                if (newstring.Contains("ACTIONS"))
                {
                    siguiente = "'";
                }
                else
                {
                    terminar = true;
                }
            }
            else if (newstring.Contains("TOKEN") && !newstring.Contains(siguiente))
            {
                if (!newstring.Contains("="))
                {
                    terminar = true;
                }
                else if (newstring.Contains("ACTIONS"))
                {
                    siguiente = "'";
                }
            }
            while (!terminar && newstring.Length > 0)
            {
                switch (siguiente)
                {
                case "=":
                    if (numero != "")
                    {
                        if (!TokenDic.Keys.Contains(numero))
                        {
                            TokenDic.Add(numero, tokens.GetRange(0, tokens.Count));
                        }
                        else
                        {
                            error.Add("El numero de token " + numero + " ya existe, por lo cual no puede ser creado"); terminar = true;
                        }
                        tokens.Clear();
                    }
                    nombre = ValidarCaracteresTokens(specialCharacters.SpecialOnTokens, newstring, "=");
                    if (nombre.ToUpper() == "TOKEN")
                    {
                        siguiente = "=";
                        newstring = newstring.Length > 0 ? newstring.Substring(nombre.Length, newstring.Length - nombre.Length) : "";
                        numero    = newstring.Length > 0 ? ValidarCaracteresTokens(specialCharacters.SpecialOnTokens, newstring, "=") : "";
                        newstring = newstring.Length > 0 ? newstring.Substring(numero.Length + 1, newstring.Length - numero.Length - 1) : "";
                    }
                    siguiente = "'";
                    break;

                case "'":
                    respuesta = ValidarCaracteresTokens(specialCharacters.SpecialOnTokens, newstring, "'");
                    if (newstring.Substring(0, 1) == "'")
                    {
                        newstring = newstring.Length > 0 ? newstring.Substring(1, newstring.Length - 1) : "";
                        respuesta = ValidarCaracteresTokens(specialCharacters.SpecialOnTokens, newstring, "'");
                        newstring = newstring.Length > 0 ? newstring.Substring(respuesta.Length + 1, newstring.Length - (respuesta.Length + 1)) : "";
                        siguiente = "'";
                    }
                    else if (newstring.Substring(0, 1) == "(")
                    {
                        newstring = newstring.Length > 0 ? newstring.Substring(1, newstring.Length - 1) : "";
                        respuesta = ValidarCaracteresTokens(specialCharacters.SpecialOnTokens, newstring, ")");
                        newstring = newstring.Length > 0 ? newstring.Substring(respuesta.Length, newstring.Length - (respuesta.Length)) : "";
                        siguiente = "'";
                    }
                    else if (sets.Contains(respuesta))
                    {
                        newstring = newstring.Length > 0 ? newstring.Substring(respuesta.Length, newstring.Length - respuesta.Length) : "";
                    }
                    else if (respuesta.ToUpper() == "TOKEN")
                    {
                        if (!TokenDic.Keys.Contains(numero))
                        {
                            TokenDic.Add(numero, tokens.GetRange(0, tokens.Count)); tokens.Clear(); numero = "";
                            siguiente = "=";
                        }
                        else
                        {
                            error.Add("El numero de token " + numero + " ya existe, por lo cual no puede ser creado"); terminar = true;
                        }
                    }
                    else if (respuesta.ToUpper() == "ACTIONS")
                    {
                        if (!TokenDic.Keys.Contains(numero))
                        {
                            TokenDic.Add(numero, tokens.GetRange(0, tokens.Count));
                        }
                        else
                        {
                            error.Add("El numero de token " + numero + " ya existe, por lo cual no puede ser creado"); terminar = true;
                        }
                        tokens.Clear(); numero = "";
                        terminar = true;
                        ValidarActions();
                    }
                    else if (respuesta == "error")
                    {
                        terminar = true;
                    }
                    else
                    {
                        newstring = newstring.Length > 0 ? newstring.Substring(respuesta.Length, newstring.Length - respuesta.Length) : "";
                    }

                    break;
                }
            }

            return(sets);
        }
Пример #2
0
        public List <string> ValidacionesSets(string cadena)
        {
            SpecialCharacters specialCharacters = new SpecialCharacters();
            string            nuevacadena       = string.Empty;

            nuevacadena += cadena;
            string respuesta = string.Empty;
            string nombre = string.Empty; string content = string.Empty;
            bool   terminar = false;

            if (cadena == "=")
            {
                sets.Add(temporal);
                temporal = ""; terminar = true; Content = ""; siguiente = "'";
            }
            while (!terminar)
            {
                switch (siguiente)
                {
                case "=":
                    nombre = ValidarCaracteres(specialCharacters.SpecialOnSets, nuevacadena, "=");
                    if (nombre == "TOKENS")
                    {
                        terminar    = true; tok = true;
                        siguiente   = "=";
                        nuevacadena = nuevacadena.Length > 0 ? nuevacadena.Substring(nombre.Length, nuevacadena.Length - nombre.Length) : "";
                    }
                    else
                    {
                        if (sets.Count > 0)
                        {
                            SetsDic.Add(sets.Last(), Content);
                            Content = "";
                        }

                        sets.Add(nombre);
                        nuevacadena = nuevacadena.Length > 0 ? nuevacadena.Substring(nombre.Length + 1, nuevacadena.Length - nombre.Length - 1) : "";
                        siguiente   = "'";
                    }
                    break;

                case "'":
                    respuesta = ValidarCaracteres(specialCharacters.SpecialOnSets, nuevacadena, "'");
                    if (respuesta == "TOKENS")
                    {
                        siguiente = "="; terminar = true; tok = true;
                        if (abre)
                        {
                            nuevacadena = nuevacadena.Length > 0 ? nuevacadena.Substring(nombre.Length, nuevacadena.Length - nombre.Length) : "";
                        }
                        else
                        {
                            error.Add("Error en linea: " + linenum);
                        }
                    }
                    else if (respuesta == "CHR")
                    {
                        nuevacadena = nuevacadena.Length > 0 ? nuevacadena.Substring(respuesta.Length, nuevacadena.Length - respuesta.Length) : "";
                        respuesta   = ValidarCaracteres(specialCharacters.SpecialOnSets, nuevacadena, "(");
                        nuevacadena = nuevacadena.Length > 0 ? nuevacadena.Substring(1, nuevacadena.Length - 1) : "";
                        respuesta   = ValidarCaracteres(specialCharacters.SpecialOnSets, nuevacadena, ")");
                        nuevacadena = nuevacadena.Length > 0 ? nuevacadena.Substring(respuesta.Length + 1, nuevacadena.Length - (respuesta.Length + 1)) : "";
                        Content    += "CHR(" + respuesta + ")";
                        respuesta   = "CHR";
                        siguiente   = ".";
                    }
                    else if (respuesta != "error")
                    {
                        if (abre)
                        {
                            Content  += "'";
                            respuesta = nuevacadena.Length > 0 ? ValidarCaracteres(specialCharacters.SpecialOnSets, nuevacadena.Substring(1, nuevacadena.Length - 1), "'") : "";
                            if (respuesta.Length == 0)
                            {
                                error.Add("Error en linea: " + linenum + " no se encontro la ' la cual fue abierta pero no cerrada, ambas comillas deben de encontrarse en la misma linea"); terminar = true;
                            }
                            else
                            {
                                Content += respuesta + "'";
                            }
                        }
                        else
                        {
                            error.Add("Error en linea: " + linenum + "se encontro la ' la cual nunca fue abierta");
                            terminar = true;
                        }
                    }
                    else
                    {
                        terminar = true;
                    }
                    nuevacadena = nuevacadena.Length > 0 && respuesta != "error" && respuesta != "CHR"? nuevacadena.Substring(respuesta.Length + 2, nuevacadena.Length - respuesta.Length - 2) : (nuevacadena = respuesta == "CHR" ?  nuevacadena: "");
                    if (nuevacadena.Length == 0)
                    {
                        terminar = true;
                    }
                    siguiente = ".";
                    break;

                case ".":
                    respuesta = ValidarCaracteres(specialCharacters.SpecialOnSets, nuevacadena, ".");
                    if (respuesta == "TOKENS")
                    {
                        siguiente   = "="; SetsDic.Add(sets.Last(), Content);
                        Content     = "";
                        terminar    = true; tok = true;
                        nuevacadena = nuevacadena.Length > 0 ? nuevacadena.Substring(nombre.Length, nuevacadena.Length - nombre.Length) : "";
                    }
                    else if (respuesta == "error")
                    {
                        terminar = true;
                    }
                    else
                    {
                        if (respuesta == "=")
                        {
                            siguiente = "=";
                        }
                        else if (respuesta == "")
                        {
                            terminar = true;
                        }
                        else if (respuesta != "error" && respuesta != "=")
                        {
                            Content    += respuesta;
                            nuevacadena = nuevacadena.Length > 0 ? nuevacadena.Substring(respuesta.Length, nuevacadena.Length - respuesta.Length) : "";
                            siguiente   = "'";
                        }
                    }
                    if (nuevacadena.Length == 0)
                    {
                        terminar = true;
                    }
                    break;
                }
            }
            return(sets);
        }