예제 #1
0
        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);
            }
        }
예제 #2
0
        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("<", "&#60;");
                break;

            case ">":
            case ">=":
                nombre_nodo = "Relac|" + actual.ToString().Replace(">", "&#62;");
                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);
            }
        }