public void graficarTS2(Ambit_Trad ambit)
        {
            var res_graphi   = "";
            var ambito_name  = "";
            var ambito_name2 = ambit.Ambit_name.Replace("General_", "");
            var graphi       = "digraph G{\n";

            graphi += "label = \"" + "Ambito Graficado: " + ambito_name2 + "\"\n";

            graphi += "graph [pad=\"" + 0.5 + "\", nodesep=\"" + 0.5 + "\", ranksep=\"" + 2 + "\"]\nnode[shape = plain]\nrankdir = LR;\nBaz [label=<";


            graphi += "\n<table border=\"" + 0 + "\" cellborder=\"" + 1 + "\" cellspacing=\"" + 0 + "\">";


            graphi += "\n<tr>\n\t<td width='100'><i>Nombre</i></td>\n\t<td width='100'><i>Tipo</i></td>\n\t<td width='100'><i>Ambito</i></td>\n\t<td><i width='100'>Valor</i></td>\n\t<td><i width='100'>Tipo Objeto</i></td>\n</tr>\n";



            while (ambit != null)
            {
                if (ambit.Variables.Count > 0)
                {
                    foreach (var item in ambit.Variables)
                    {
                        Identifier_Trad id = (Identifier_Trad)item.Value;
                        ambito_name = ambit.Ambit_name.Replace("General_", "");
                        res_graphi  = "\n<tr>\n\t<td height='25'>" + id.Id + "</td>\n\t<td height='25'>" + id.DataType + "</td>\n\t<td height='25'>" + ambito_name + "</td>\n\t<td height='25'>" + id.Value.ToString() + "</td>\n\t<td height='25'>" + id.Tipo_dato + "</td>\n</tr>" + res_graphi;
                    }
                }

                if (ambit.Functions.Count > 0)
                {
                    var type   = "void";
                    var isfunc = "Procedure";

                    foreach (var item in ambit.Functions)
                    {
                        type   = "void";
                        isfunc = "Procedure";

                        Function_Trad func = (Function_Trad)item.Value;
                        if (!func.IsProcedure)
                        {
                            isfunc = "Function";
                            type   = func.Tipe.ToString();
                        }
                        res_graphi = "<tr>\n<td height='25'>" + func.Id + "</td>\n<td height='25'>" + type + "</td>\n<td height='25'>" + ambit.Ambit_name + "</td>\n<td height='25'>" + func.Retorno.ToString() + "</td>\n<td height='25'>" + isfunc + "</td>\n</tr>" + res_graphi;
                    }
                }
                var temp = ambit.Anterior;
                ambit = temp;
            }

            graphi += res_graphi + "\n</table>>];\n" + "}";


            print_image(this.path, "tabla_simbolos", ambito_name2, graphi);
        }
Пример #2
0
        public void saveFuncion(string id, Function_Trad function)
        {
            Ambit_Trad amb = this;

            if (!amb.functions.ContainsKey(id))
            {
                amb.functions[id] = function;
            }
        }
Пример #3
0
        public void setFunction(string id, Function_Trad function)
        {
            Ambit_Trad env = this;

            while (env != null)
            {
                if (env.Functions.ContainsKey(id))
                {
                    env.Functions[id] = function;
                    return;
                }
                env = env.anterior;
            }
        }
        public void getAmbitoGraficar_Trad(Ambit_Trad ambit, bool isgeneral)
        {
            var ambito_name = ambit.Ambit_name.Replace("General_", "");

            var enlace = "";

            var texto =
                ambito_name + "[label=<\n" +
                "<table border='0' cellborder='1' cellspacing='0'>\n" +
                "<tr>\n" +
                "<td>" + ambito_name + "</td>" +
                "</tr>\n" +
                "<tr>\n" +
                "<td cellpadding='4'>\n" +
                "<table color='orange' cellspacing='0'>\n" +
                "<tr>\n" +
                "<td width='100'><i>Nombre</i></td>\n" +
                "<td width='100'><i>Tipo</i></td>\n" +
                "<td width='100'><i>Ambito</i></td>\n" +
                "<td width='100'><i>Valor</i></td>\n" +
                "<td width='100'><i>Tipo objeto</i></td>\n" +
                "</tr>\n";


            if (ambit.Anterior != null)
            {
                var ambit_temp = ambit.Anterior.Ambit_name.Replace("General_", "");
                enlace = ambit_temp + "->" + ambito_name + ";\n";
            }

            var res_graphi = "";

            res_graphi = get_var_anterior(ambit, res_graphi);

            if (ambit.Functions.Count > 0)
            {
                var type   = "void";
                var isfunc = "Procedure";

                foreach (var item in ambit.Functions)
                {
                    type   = "void";
                    isfunc = "Procedure";

                    Function_Trad func = (Function_Trad)item.Value;
                    if (!func.IsProcedure)
                    {
                        isfunc = "Function";
                        type   = func.Tipe.ToString();
                    }
                    res_graphi = "<tr>\n<td height='25'>" + func.Id + "</td>\n<td height='25'>" + type + "</td>\n<td height='25'>" + ambit.Ambit_name + "</td>\n<td height='25'>" + func.Retorno.ToString() + "</td>\n<td height='25'>" + isfunc + "</td>\n</tr>" + res_graphi;
                }
            }



            texto += res_graphi
                     + "</table>\n</td>\n</tr>\n </table>>];\n";

            ambitos.Add(new Simbolo(ambito_name, texto, enlace));
        }
        public override string Execute(Ambit_Trad ambit)
        {
            var        funcion_llamada = ambit.getFuncion(id);
            Ambit_Trad function_ambit  = new Ambit_Trad();

            if (funcion_llamada != null)
            {
                if (funcion_llamada.IsProcedure)
                {
                    function_ambit = new Ambit_Trad(ambit, ambit.Ambit_name + "_Procedure_" + funcion_llamada.Id, "Procedure", false);
                }
                else
                {
                    function_ambit = new Ambit_Trad(ambit, ambit.Ambit_name + "_Function_" + funcion_llamada.Id, "Function", false);
                }
                foreach (var param in funcion_llamada.Parametos)
                {
                    param.Execute(function_ambit);
                }


                for (int i = 0; i < parametros.Count; i++)
                {
                    var param  = (Literal_Trad)parametros[i];
                    var result = param.Execute(function_ambit);
                    var decla  = (Declaration_Trad)funcion_llamada.getParameterAt(i);
                    function_ambit.setVariableFuncion(decla.Id, result, decla.Type, "Parametro");
                }
            }



            var params_call = "";
            var cont        = 0;
            var res         = "";

            foreach (var item in parametros)
            {
                cont++;
                if (item is Expresion_Trad)
                {
                    res = ((Expresion_Trad)item).Execute(ambit);
                }
                else
                {
                    res = item.ToString() + ",";
                }
                if (cont != parametros.Count)
                {
                    params_call += res + ",";
                }
                else
                {
                    params_call += res;
                }
            }

            Function_Trad func = ambit.getFuncion(id);

            if (func == null)
            {
                return(id + "(" + params_call + ")");
            }
            else
            {
                var parametros_padre = "";

                if (func.EsHija)
                {
                    Function_Trad funcpadres = ambit.getFuncion(func.Padre_inmediato);
                    foreach (var item in funcpadres.Declaraciones)
                    {
                        Declaration_Trad dec = ((Declaration_Trad)item);
                        parametros_padre += "," + dec.Id;
                    }
                }

                GraphController.Instance.getAmbitoGraficar_Trad(function_ambit, false);
                return(func.UniqId + "(" + params_call + parametros_padre + ")");
            }
        }