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); }
public void saveFuncion(string id, Function_Trad function) { Ambit_Trad amb = this; if (!amb.functions.ContainsKey(id)) { amb.functions[id] = function; } }
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 + ")"); } }