//JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET: //ORIGINAL LINE: public GrafoL<N> KruskalGrafoLista(IGrafo<N> grafo) throws Excepciones.ExcepcionAristaImposible public virtual GrafoL<N> KruskalGrafoLista(IGrafo<N> grafo) { GrafoL<N> graph = null; if (grafo.esDirigido()) { graph = new GrafoL<N>(true, true); } else { graph = new GrafoL<N>(false, true); } List<Arista<N>> aristas = grafo.generarAristas(); aristas.sort(null); List<N> nodos = grafo.darValorNodos(); for (int i = 0; i < nodos.Count; i++) { graph.agregarNodo(nodos[i]); } List<Conjunto<N>> conjuntos = new List<Conjunto<N>>(); for (int i = 0; i < nodos.Count; i++) { conjuntos.Add(new Conjunto<N>(nodos[i])); } for (int i = 0; i < aristas.Count && conjuntos.Count > 1; i++) { int n = conjuntos.Count; Arista<N> arista = aristas[i]; N nodo1 = arista.NodoInicial.Valor; N nodo2 = arista.NodoFinal.Valor; for (int j = 0; j < conjuntos.Count; j++) { if (conjuntos[j].existeNodoEnElConjunto(nodo1) && !conjuntos[j].existeNodoEnElConjunto(nodo2)) { Conjunto<N> c1 = conjuntos[j]; Conjunto<N> c2 = null; int l = -1; for (int h = 0; c2 == null && h < conjuntos.Count; h++) { if (conjuntos[h].existeNodoEnElConjunto(nodo2)) { c2 = conjuntos[h]; l = h; } } if (c2 != null) { c1.unirConjuntos(c2); conjuntos.RemoveAt(l); } } } if (n > conjuntos.Count) { graph.agregarArista(nodo1, nodo2, arista.Peso); } } return graph; }
public void ExprecionesYConjuntos() { //epsilon ε Token temp = null; Exprecion nuevo = null; Conjunto nuevoC = null; Entrada nuevoE = null; int estado = 0; int i = 0; while (i < listaT.Count) { temp = listaT[i]; int no = temp.idToken; switch (estado) { case 0: if (no == 14) { i++; estado = 5; } else if (no == 15) { i++; estado = 2; nuevo = new Exprecion(temp); nuevoE = new Entrada(temp); } else { i++; } break; case 1: if (no == 9) { i++; estado = 0; } else { i++; } break; case 2: if (no == 20) { i++; estado = 3; } else if (no == 8) { i++; estado = 17; } else { estado = 1; } break; case 3: if (no == 1 || no == 2 || no == 3 || no == 4 || no == 5 || no == 19) { nuevo.tokens.Add(temp); i++; estado = 3; } else if (no == 6) { i++; estado = 4; } else if (no == 9) { expreciones.Add(nuevo); nuevo.grafo.comienzo(nuevo.tokens, nuevo.nombre); nuevo.grafo.graficar(); nuevo.comienzo(); seleccion.Items.Add(nuevo.nombre.lexema + "-AFN"); seleccion.Items.Add(nuevo.nombre.lexema + "-Tabla"); seleccion.Items.Add(nuevo.nombre.lexema + "-AFD"); i++; estado = 0; } else { estado = 1; } break; case 4: if (no == 15) { nuevo.tokens.Add(temp); i++; estado = 4; } else if (no == 7) { i++; estado = 3; } else { estado = 1; } break; case 5: if (no == 8) { i++; estado = 6; } else { estado = 1; i++; } break; case 6: if (no == 15) { nuevoC = new Conjunto(temp); i++; estado = 7; } else { estado = 1; i++; } break; case 7: if (no == 20) { i++; estado = 8; } else { estado = 1; i++; } break; case 8: if (no == 15) { i++; nuevoC.caracteres.Add(temp.lexema); estado = 9; } else if (no == 19) { i++; nuevoC.caracteres.Add(temp.lexema); estado = 11; } else if (no == 21) { i++; for (int j = 0; j < temp.lexema.Length; j++) { nuevoC.caracteres.Add(temp.lexema[j].ToString()); } estado = 11; } else if (no == 18) { i++; nuevoC.caracteres.Add(temp.lexema); estado = 13; } else if (no == 16 || no == 17) { i++; nuevoC.caracteres.Add(temp.lexema); estado = 15; } else { estado = 1; i++; } break; case 9: if (no == 9) { i++; conjuntos.Add(nuevoC); estado = 0; } else if (no == 10) { i++; estado = 10; } else if (no == 11) { estado = 11; } else { estado = 1; i++; } break; case 10: if (no == 15) { i++; if (nuevoC.caracteres[0].Length == 1 && temp.lexema.Length == 1 && nuevoC.caracteres[0][0] < temp.lexema[0]) { char inter = nuevoC.caracteres[0][0]; while (inter < temp.lexema[0]) { inter++; nuevoC.caracteres.Add(inter.ToString()); } estado = 100; } else { estado = 1; } } else { estado = 1; i++; } break; case 11: if (no == 11) { i++; estado = 12; } else if (no == 9) { i++; conjuntos.Add(nuevoC); estado = 0; } else { estado = 1; i++; } break; case 12: if (no == 15 || no == 16 || no == 17 || no == 18 || no == 19) { i++; nuevoC.caracteres.Add(temp.lexema); estado = 11; } else if (no == 21) { i++; for (int j = 0; j < temp.lexema.Length; j++) { nuevoC.caracteres.Add(temp.lexema[j].ToString()); } estado = 11; } else { estado = 1; i++; } break; case 13: if (no == 9) { i++; conjuntos.Add(nuevoC); estado = 0; } else if (no == 10) { i++; estado = 14; } else if (no == 11) { estado = 11; } else { estado = 1; i++; } break; case 14: if (no == 18) { i++; if (nuevoC.caracteres[0][0] < temp.lexema[0]) { char inter = nuevoC.caracteres[0][0]; while (inter < temp.lexema[0]) { inter++; if (!char.IsLetterOrDigit(inter)) { nuevoC.caracteres.Add(inter.ToString()); } } estado = 100; } else { i++; estado = 1; } } else { estado = 1; i++; } break; case 15: if (no == 9) { i++; conjuntos.Add(nuevoC); estado = 0; } else if (no == 10) { i++; estado = 16; } else if (no == 11) { estado = 11; } else { estado = 1; i++; } break; case 16: if (no == 16 || no == 17) { i++; int uno, dos; if (Int32.TryParse(nuevoC.caracteres[0], out uno) && Int32.TryParse(temp.lexema, out dos)) { if (uno < dos) { while (uno < dos) { uno++; nuevoC.caracteres.Add(uno.ToString()); } estado = 100; } else { estado = 1; } } else { estado = 1; } } else { estado = 1; i++; } break; case 17: if (no == 19) { i++; nuevoE.texto = temp.lexema; estado = 18; } else { estado = 1; } break; case 18: if (no == 9) { i++; entradas.Add(nuevoE); estado = 0; } else { estado = 1; } break; case 100: if (no == 9) { i++; estado = 0; conjuntos.Add(nuevoC); } else { estado = 1; i++; } break; default: break; } } for (int j = 0; j < expreciones.Count; j++) { expreciones[j].conjuntos = conjuntos; } for (int j = 0; j < entradas.Count; j++) { //entradas[j].id = j; for (int k = 0; k < expreciones.Count; k++) { if (entradas[j].nombre.lexema == expreciones[k].nombre.lexema) { entradas[j].exprecion = expreciones[k]; break; } } } for (int j = 0; j < entradas.Count; j++) { if (entradas[j].exprecion == null) { salida.AppendText("La exprecion regular: " + entradas[j].nombre.lexema + " no existe para la entrada: \"" + entradas[j].texto + "\"\n"); } else if (entradas[j].Comienzo(j)) { documentos.Items.Add("ListaTokens-" + entradas[j].exprecion.nombre.lexema + "-" + j); salida.AppendText("La entrada: \"" + entradas[j].texto + "\" SI es valida con la exprecion regular: " + entradas[j].exprecion.nombre.lexema + "\n"); } else { documentos.Items.Add("ListaTokens-" + entradas[j].exprecion.nombre.lexema + "-" + j); documentos.Items.Add("ListaErrores-" + entradas[j].exprecion.nombre.lexema + "-" + j); salida.AppendText("La entrada: \"" + entradas[j].texto + "\" NO es valida con la exprecion regular: " + entradas[j].exprecion.nombre.lexema + "\n"); } } }
private void guardarConjuntos() { String nombre = ""; //Bandeara para saber si esta dentro de un conjunto o no Boolean dentroC = false; //Bandera para saber si es conjunto o macro // macro = 0 CONJ: ID -> char ~ char ; //conjunto = 1 CONJ: ID -> char,char,char ; //conjunto = int tipo = 3; Boolean ayuda = false; Conjunto temp = null; Token salida; Token t = null; Token temporal; for (int i = 0; i < simbolos.Count; i++) { salida = (Token)simbolos[i]; if (salida.getToken() == 20) { dentroC = true; //Determino el tipo temporal = (Token)simbolos[i + 5]; t = (Token)simbolos[i + 4]; if (temporal.getToken() == 13) { tipo = 0; ayuda = false; } else if (temporal.getToken() == 12) { tipo = 1; } else if (t.getToken() == 27) { tipo = 2; } } else if (salida.getToken() == 5) { nombre = salida.getLexema(); } if (dentroC) { //esta dentro tiene que evaluar entre los dos casos if (tipo == 0) { if (salida.getToken() == 13) { //Si es virgulilla ignora ayuda = true; } else if (salida.getToken() == 10) { //Si es punto y coma termino de guardar conjuntos dentroC = false; } else {//Debe guardar if (ayuda) { Conjunto n = new Conjunto(nombre); temporal = (Token)simbolos[i - 2]; n.llenar(temporal.getLexema()[0], salida.getLexema()[0]); conjuntos.Add(n); ayuda = false; } } } else if (tipo == 1) { if (salida.getToken() == 12) { //Si es coma ignora } else if (salida.getToken() == 10) { //Si es punto y coma termino de guardar conjuntos dentroC = false; conjuntos.Add(temp); } else if (salida.getToken() == 6) { ayuda = true; temp = new Conjunto(nombre); } else {//Debe guardar if (ayuda) { if (salida.getToken() == 23)//salto de linea { temp.add(10); } else if (salida.getToken() == 24)//tabulacion { temp.add(9); } else if (salida.getToken() == 25)//comilla simples { temp.add(39); } else if (salida.getToken() == 26)//comillas dobles { temp.add(34); } else { temp.agregar(salida.getLexema()[0]); } } } } else if (tipo == 2) { char[] arr = t.getLexema().ToArray(); //Guarde y sali t = (Token)simbolos[i + 2]; nombre = t.getLexema(); Conjunto n = new Conjunto(nombre); foreach (char item in arr) { n.agregar(item); } conjuntos.Add(n); dentroC = false; } } } }