Exemplo n.º 1
0
        //Metodo para verificar si un simbolo existe
        public bool existes(string cad, CTK centrada)
        {
            NT n;
            NT org = centrada.buscar(cad);

            if (org == null)
            {
                org = centrada.buscar3(cad);
            }
            if (org == null)
            {
                org = centrada.buscar4(cad);
            }
            if (org == null)
            {
                org = centrada.buscar5(cad);
            }
            if (org == null)
            {
                org = centrada.buscar2(cad);
            }
            if (org != null)
            {
                n = org.copiar();
                ltok.Add(n);
                return(true);
            }
            else
            {
                return(false);
            }
        }
 //Este metodo crea la parte izquierda de la produccion, recibe una cadena de la cual se
 //extraeran los tokens y una lista de tokens.
 public bool partiz(string texto, CTK listokens)
 {
     ladoIzq = listokens.buscar(texto);
     if (ladoIzq == null)
     {
         ladoIzq = new NT(texto);
         listokens.agregaToken(ladoIzq);
     }
     ladoIzq.NoTerminal();
     return(true);
 }
        //Este metodo es el encargado de crear las nuevas producciones, recibe una cadena que es de
        //donde se extraeran los tokens al igual que una lista de tokens, regresa la nueva produccion
        //si es que se pudo crear.
        private Produccion nuevaprod(string cadena, CTK listokens)
        {
            Produccion prodaux = new Produccion();

            if (prodaux.crealistok(cadena, listokens) == true)
            {
                return(prodaux);
            }
            else
            {
                return(null);
            }
        }
Exemplo n.º 4
0
 //Metodo para crear una cadena de tokens.
 public bool creaCadena(string cadenaEntrada, CTK cajaTokens)
 {
     foreach (var aux in cadenaEntrada.Replace("\t", "").Split(' '))
     {
         if (aux != "" && aux != " ")
         {
             if ((existes(aux.ToString(), cajaTokens) == false) && (aux != "\0"))
             {
                 return(false);
             }
         }
     }
     return(true);
 }
Exemplo n.º 5
0
        //Metodo para crear nuevos tokens.
        public void nuevotok(string stcrear, CTK ctks)
        {
            NT nuevo = ctks.buscar(stcrear);

            if (nuevo != null)
            {
                ltok.Add(nuevo);
            }
            else
            {
                nuevo = new NT(stcrear);
                ctks.agregaToken(nuevo);
                ltok.Add(nuevo);
            }
        }
        //Este metodo crea la parte derecha de la produccion, recibe una cadena de la cual se
        //extraeran los tokens y una lista de tokens.
        public bool parder(string entrada, CTK tkns, ref int numero)
        {
            string cadena = entrada;

            if (cadena == "")
            {
                return(false);
            }
            cadena = cadena.Replace("\\|", "::");
            string[]   datos = cadena.Split('|');
            Produccion produccion;
            string     text;

            foreach (string cad in datos)
            {
                if (cad != "")
                {
                    Char[] c = new char[1] {
                        ' '
                    };
                    text = "";
                    //       text = cad.Replace(" ", "");
                    foreach (var it in cad.Split(c, StringSplitOptions.RemoveEmptyEntries))
                    {
                        if (it != " ")
                        {
                            text += "<" + it + ">";
                        }
                    }

                    produccion = nuevaprod(text, tkns);
                    if ((produccion == null) || (produccion.epsnovalido() == true))
                    {
                        return(false);
                    }
                    else if (existpro(produccion) == false)
                    {
                        produccion.numero = numero;
                        numero++;
                        derecha.Add(produccion);
                    }
                }
            }
            return(true);
        }
Exemplo n.º 7
0
        //Metodo para crear lista de tokens
        public bool crealistok(string centr, CTK contoks)
        {
            int    tipo    = 0;
            int    tipoant = 0;
            string cad     = "";
            string cad2    = centr;

            cad2 = cad2.Replace("\\>", "|>|");
            cad2 = cad2.Replace("\\<", "|<|");
            cad2 = cad2.Replace("\\~", "|~|");
            cad2 = cad2.Replace("\\e", "|℮|");
            cad2 = cad2.Replace("\\0", "\0");
            cad2 = cad2.Replace("::", "|||");
            cad2 = cad2.Replace("~", "ε");

            foreach (char c in cad2)
            {
                switch (tipo)
                {
                case 0:
                    if (c == '<')
                    {
                        tipo = 1;
                        break;
                    }
                    if (c == '|')
                    {
                        tipoant = 0;
                        tipo    = 2;
                        break;
                    }
                    nuevotok(c.ToString(), contoks);
                    if (c == 'ε')
                    {
                        if (cad2.Length == 1)
                        {
                            return(true);
                        }
                        else
                        {
                            return(false);
                        }
                    }
                    break;

                case 1:
                    if (c == '>')
                    {
                        nuevotok(cad, contoks);
                        tipo = 0;
                        cad  = "";
                        break;
                    }
                    else
                    {
                        if (c == '|')
                        {
                            tipoant = 1;
                            tipo    = 2;
                            break;
                        }
                        else
                        {
                            cad = cad + c.ToString();
                        }
                    }
                    break;

                case 2:
                    cad  = cad + c.ToString();
                    tipo = 3;
                    break;

                case 3:
                    tipo = tipoant;
                    if (tipo == 0)
                    {
                        nuevotok(cad, contoks);
                        cad = "";
                    }
                    break;
                }
            }
            return(tipo == 0);
        }