예제 #1
0
 public void setizquierda(Nodo izquierda)
 {
     this.izquierda = izquierda;
 }
예제 #2
0
 public void setderecha(Nodo derecha)
 {
     this.derecha = derecha;
 }
예제 #3
0
        public LinkedList <Nodo> generarLista(LinkedList <Token> tokens)
        {
            imagenes   = new LinkedList <Image>();
            graficar   = 0;
            AFD        = new LinkedList <Image>();
            mueves     = new LinkedList <Mueve>();
            Tablas     = new LinkedList <Image>();
            lTokens    = tokens;
            lMueves    = new LinkedList <LinkedList <Mueve> >();
            nombresExp = new LinkedList <string>();
            fin        = 0;
            for (int i = 0; i < lTokens.Count(); i++)
            {
                token = lTokens.ElementAt(i);

                if (token.getTipo() == Token.Tipo.ID && lTokens.ElementAt(i + 1).getTipo() == Token.Tipo.FLECHA &&
                    (lTokens.ElementAt(i + 2).getTipo() == Token.Tipo.ASTERISCO || lTokens.ElementAt(i + 2).getTipo() == Token.Tipo.PUNTO ||
                     lTokens.ElementAt(i + 2).getTipo() == Token.Tipo.INTERROGACION || lTokens.ElementAt(i + 2).getTipo() == Token.Tipo.OR ||
                     lTokens.ElementAt(i + 2).getTipo() == Token.Tipo.MAS))
                {
                    lNodos       = new LinkedList <Nodo>();
                    lNuevos      = new LinkedList <Token>();
                    tokensNuevos = new LinkedList <Nodo>();
                    entradas     = new LinkedList <string>();
                    nombresExp.AddLast(token.getValor());
                    i     = i + 2;
                    token = lTokens.ElementAt(i);
                    while (token.getTipo() != Token.Tipo.PUNTOYCOMA)
                    {
                        if (token.getTipo() != Token.Tipo.COMILLA_DOBLES && token.getTipo() != Token.Tipo.LLAVE_ABRE && token.getTipo() != Token.Tipo.LLAVE_CIERRA &&
                            token.getTipo() != Token.Tipo.CORCHETECIERRA && token.getTipo() != Token.Tipo.CORCHETEABRE && token.getTipo() != Token.Tipo.DOS_PUNTOS)
                        {
                            lNuevos.AddLast(token);
                        }
                        i++;
                        token = lTokens.ElementAt(i);
                    }
                    Nodo nodo;
                    for (int j = 0; j < lNuevos.Count(); j++)
                    {
                        token = lNuevos.ElementAt(j);
                        switch (token.getTipo())
                        {
                        case Token.Tipo.PUNTO:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.OR:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.MAS:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.ASTERISCO:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.INTERROGACION:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.CADENA:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.ID:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.SALTODELINEA:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.TABULACION:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.COMILLA:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.SLASHCOMILLAS:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;

                        case Token.Tipo.TODO:
                            nodo = new Nodo(token.getValor(), token.getTipo(), j, token.getTipo());
                            tokensNuevos.AddLast(nodo);
                            break;
                        }
                    }

                    int r = 0;
                    while (tokensNuevos.Count() > 1)
                    {
                        if (nodoBinario(r))
                        {
                            r = 0;
                        }
                        else if (nodoUnario(r))
                        {
                            r = 0;
                        }
                        else
                        {
                            r++;
                        }
                        Console.WriteLine("entra");
                    }

                    tokensNuevos.ElementAt(0).imprimirNodos();
                    imagenes.AddLast(generarGraphviz());
                    LinkedList <Transicion> transicions = new LinkedList <Transicion>();
                    transicions = tokensNuevos.ElementAt(0).generarTransiciones("F", "L", transicions);
                    Thompson thompson = new Thompson();
                    mueves = thompson.generarAFD(transicions);
                    lMueves.AddLast(thompson.getMueves());
                    AFD.AddLast(Run(thompson.getGraphivz()));
                    Tablas.AddLast(Run(thompson.tablaDeTransiciones()));
                    // generarImagen(generarGraphviz());
                }
                else if (token.getTipo() == Token.Tipo.PORCENTAJE)
                {
                    fin = i;
                    i   = lTokens.Count();
                }
            }

            return(lNodos);
        }