private static void recorrerArbol(ParseNode actual, string padre) { string nombre_actual = "n" + contador; grafo += nombre_actual + "[label=\"" + actual.ToString() + "\"];\n";//genero el nodo if (!string.IsNullOrEmpty(padre)) { grafo += padre + "->" + nombre_actual + ";\n";//padre apunta a actual } foreach (ParseNode hijo in actual.childNodes) { contador++; recorrerArbol(hijo, nombre_actual); } }
private static void recorrerExpresion(ParseNode actual, string padre) { //1.-verificamos el nombre del nodo string nombre_actual = "n" + contador; string valor = actual.ToString(); string nombre_nodo = ""; switch (valor) { case "&&": case "||": case "|&": case "!": nombre_nodo = "Logico|" + actual.ToString(); break; case "<": case "<=": nombre_nodo = "Relac|" + actual.ToString().Replace("<", "<"); break; case ">": case ">=": nombre_nodo = "Relac|" + actual.ToString().Replace(">", ">"); break; case "==": case "!=": case "~": nombre_nodo = "Relac|" + actual.ToString(); break; case "+": case "-": case "*": case "/": case "%": case "^": nombre_nodo = "Aritm|" + actual.ToString(); break; default: string tipo = actual.Tipo; switch (tipo) { case "Int": case "Double": nombre_nodo = "Number|" + actual.ToString(); break; case "Bool": nombre_nodo = "Bool|" + actual.ToString(); break; case "String": nombre_nodo = "String|" + actual.ToString(); break; case "Char": nombre_nodo = "Char|" + actual.ToString(); break; case "(tk_id)": nombre_nodo = "Variable|" + actual.ToString(); break; case "<LLAMADA>": nombre_nodo = "Funcion|" + actual.izq().ToString(); break; default: nombre_nodo = actual.ToString(); break; } break; } grafo += nombre_actual + "[label=\"" + nombre_nodo + "\"];\n";//genero el nodo if (!string.IsNullOrEmpty(padre)) { grafo += padre + "->" + nombre_actual + ";\n";//padre apunta a actual } if ("<LLAMADA>".Equals(actual.ToString())) { contador++; return;//para no revisar que tiene llamada y meterlo accidentalmente en el dibujo } foreach (ParseNode hijo in actual.childNodes) { contador++; recorrerExpresion(hijo, nombre_actual); } }