コード例 #1
0
        private void crearArbol(StreamWriter write, nodoArbol nodo)
        {
            if (nodo != null)
            {
                crearArbol(write, nodo.getLeft());

                try
                {
                    if (nodo.getValor().Length == 1)
                    {
                        write.WriteLine("\"node" + nodo.getValor() + nodo.getEstadoFin() + nodo.getEstadoInicio() + "\"[label = \"<f0>" + nodo.getEstadoInicio() + " |<f1>\\" + nodo.getValor() + " |<f2>" + nodo.getEstadoFin() + " \"];");
                    }

                    if (nodo.getLeft() != null)
                    {
                        write.WriteLine("\"node" + nodo.getValor() + nodo.getEstadoFin() + nodo.getEstadoInicio() + "\":f0 -> \"node" + nodo.getLeft().getValor() + nodo.getLeft().getEstadoFin() + nodo.getLeft().getEstadoInicio() + "\";");
                    }

                    if (nodo.getRight() != null)
                    {
                        write.WriteLine("\"node" + nodo.getValor() + nodo.getEstadoFin() + nodo.getEstadoInicio() + "\":f2 -> \"node" + nodo.getRight().getValor() + nodo.getRight().getEstadoFin() + nodo.getRight().getEstadoInicio() + "\";");
                    }
                }
                catch (Exception e)
                {
                }
                crearArbol(write, nodo.getRight());
            }
        }
コード例 #2
0
 public void insert(string valor, int tipo, int esConj)
 {
     if (raiz != null)
     {
         insertBoolean = false;
         insertNodo(valor, tipo, raiz, esConj);
     }
     else
     {
         this.raiz = new nodoArbol(valor, tipo, esConj);
     }
 }
コード例 #3
0
        public void cabeceraPng(StreamWriter escritor, nodoArbol nodo)
        {
            if (nodo.getLeft() != null)
            {
                cabeceraPng(escritor, nodo.getLeft());
            }

            if (nodo.getRight() != null)
            {
                cabeceraPng(escritor, nodo.getRight());
            }

            if (nodo.getTipo() == 0)
            {
                escritor.Write("<td>" + nodo.getValor() + "</td>");
            }
        }
コード例 #4
0
        private void insertNodo(string valor, int tipo, nodoArbol nodo, int esConj)
        {
            if (nodo.getLeft() != null)
            {
                insertNodo(valor, tipo, nodo.getLeft(), esConj);
            }

            if (nodo.getRight() != null)
            {
                insertNodo(valor, tipo, nodo.getRight(), esConj);
            }

            if (!insertBoolean)
            {
                switch (nodo.getTipo())
                {
                case 0:
                    break;

                case 1:
                    if (nodo.getLeft() == null)
                    {
                        insertLeft(valor, tipo, nodo, esConj);
                        insertBoolean = true;
                    }
                    else if (nodo.getRight() == null)
                    {
                        insertRight(valor, tipo, nodo, esConj);
                        insertBoolean = true;
                    }
                    break;

                case 2:
                    if (nodo.getLeft() == null)
                    {
                        insertLeft(valor, tipo, nodo, esConj);
                        insertBoolean = true;
                    }
                    break;

                default:
                    break;
                }
            }
        }
コード例 #5
0
        public void calcularEstados(nodoArbol nodo)
        {
            if (nodo.getLeft() != null)
            {
                calcularEstados(nodo.getLeft());
            }

            if (nodo.getRight() != null)
            {
                calcularEstados(nodo.getRight());
            }

            //Evaluar si el nodo es una concatenacion
            if (nodo.getValor().Equals(".") && nodo.getTipo() == 1)
            {
                nodo.setEstadoInicio(nodo.getLeft().getEstadoInicio());
                nodo.setEstadoFin(nodo.getRight().getEstadoFin());
                nodo.getRight().setEstadoInicio(nodo.getLeft().getEstadoFin());
                int       estadoContinuo = nodo.getLeft().getEstadoFin();
                nodoArbol aux            = nodo.getRight();

                while (aux != null)
                {
                    aux.setEstadoInicio(estadoContinuo);
                    if (aux.getValor().Equals(".") && nodo.getTipo() == 1)
                    {
                        aux = aux.getLeft();
                    }
                    else
                    {
                        break;
                    }
                }
            }
            else
            {
                nodo.setEstadoInicio(estado);
                estado++;
                nodo.setEstadoFin(estado);
                estado++;
            }
        }
コード例 #6
0
        private void insertRight(string valor, int tipo, nodoArbol nodo, int esConj)
        {
            nodoArbol nodoInsert = new nodoArbol(valor, tipo, esConj);

            nodo.setRight(nodoInsert);
        }
コード例 #7
0
 public arbol()
 {
     this.raiz = null;
 }
コード例 #8
0
        private void llenarTabla(nodoArbol nodo)
        {
            if (nodo.getLeft() != null)
            {
                llenarTabla(nodo.getLeft());
            }

            if (nodo.getRight() != null)
            {
                llenarTabla(nodo.getRight());
            }

            //Insertar estados
            if (!existeEstado(nodo.getEstadoInicio()))
            {
                tablaAfnd.Add(new nodoThompson(nodo.getEstadoInicio()));
            }

            if (!existeEstado(nodo.getEstadoFin()))
            {
                tablaAfnd.Add(new nodoThompson(nodo.getEstadoFin()));
            }

            char epsilon = (char)603;

            //Insertar transiciones
            switch (nodo.getTipo())
            {
            case 0:
                //Conectar nodos de hoja
                foreach (nodoThompson item in tablaAfnd)
                {
                    if (item.getEstado() == nodo.getEstadoInicio())
                    {
                        item.addTransicion(nodo.getEstadoFin(), nodo.getValor(), 0, nodo.getEsConj());
                    }
                }
                break;

            case 1:
                switch (nodo.getValor())
                {
                case ".":
                    //Ignorar
                    break;

                case "|":
                    //Insertar conexiones
                    foreach (nodoThompson item in tablaAfnd)
                    {
                        //Conexiones iniciales
                        if (item.getEstado() == nodo.getEstadoInicio())
                        {
                            item.addTransicion(nodo.getLeft().getEstadoInicio(), epsilon.ToString(), 0, 0);
                            item.addTransicion(nodo.getRight().getEstadoInicio(), epsilon.ToString(), 0, 0);
                        }

                        //Conectar al final
                        if (item.getEstado() == nodo.getLeft().getEstadoFin())
                        {
                            item.addTransicion(nodo.getEstadoFin(), epsilon.ToString(), 0, 0);
                        }
                        if (item.getEstado() == nodo.getRight().getEstadoFin())
                        {
                            item.addTransicion(nodo.getEstadoFin(), epsilon.ToString(), 0, 0);
                        }
                    }
                    break;
                }
                break;

            case 2:
                switch (nodo.getValor())
                {
                case "*":
                    //Insertar conexiones
                    foreach (nodoThompson item in tablaAfnd)
                    {
                        //Conexiones iniciales
                        if (item.getEstado() == nodo.getEstadoInicio())
                        {
                            item.addTransicion(nodo.getEstadoFin(), epsilon.ToString(), 0, 0);
                            item.addTransicion(nodo.getLeft().getEstadoInicio(), epsilon.ToString(), 0, 0);
                        }

                        //Conexiones finales nodo hijo
                        if (item.getEstado() == nodo.getLeft().getEstadoFin())
                        {
                            item.addTransicion(nodo.getEstadoFin(), epsilon.ToString(), 0, 0);
                            item.addTransicion(nodo.getLeft().getEstadoInicio(), epsilon.ToString(), 1, 0);
                        }
                    }
                    break;

                case "?":
                    //Insertar conexiones
                    foreach (nodoThompson item in tablaAfnd)
                    {
                        //Conexiones iniciales
                        if (item.getEstado() == nodo.getEstadoInicio())
                        {
                            item.addTransicion(nodo.getLeft().getEstadoInicio(), epsilon.ToString(), 0, 0);
                            item.addTransicion(nodo.getEstadoFin(), epsilon.ToString(), 0, 0);
                        }

                        //Conexiones finales
                        if (item.getEstado() == nodo.getLeft().getEstadoFin())
                        {
                            item.addTransicion(nodo.getEstadoFin(), epsilon.ToString(), 0, 0);
                        }
                    }
                    break;

                case "+":
                    //Insertar conexiones
                    foreach (nodoThompson item in tablaAfnd)
                    {
                        //Conexiones iniciales
                        if (item.getEstado() == nodo.getEstadoInicio())
                        {
                            item.addTransicion(nodo.getLeft().getEstadoInicio(), epsilon.ToString(), 0, 0);
                        }

                        //Conexiones finales
                        if (item.getEstado() == nodo.getLeft().getEstadoFin())
                        {
                            item.addTransicion(nodo.getLeft().getEstadoInicio(), epsilon.ToString(), 1, 0);
                            item.addTransicion(nodo.getEstadoFin(), epsilon.ToString(), 0, 0);
                        }
                    }
                    break;
                }
                break;
            }
        }
コード例 #9
0
 public void setRight(nodoArbol right)
 {
     this.right = right;
 }
コード例 #10
0
 public void setLeft(nodoArbol left)
 {
     this.left = left;
 }