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()); } }
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>"); } }
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; } } }
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++; } }
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; } }