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 + ")"); } }
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 = parametros[i]; var decla = (Declaration_Trad)funcion_llamada.getParameterAt(i); function_ambit.setVariableFuncion(decla.Id, param.ToString(), decla.Type, "Parametro"); } } var parametros_llam = ""; var tabs = ""; var cont = 0; var res = ""; for (int j = 0; j < cant_tabs; j++) { tabs = tabs + " "; } 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) { parametros_llam += res; } else { parametros_llam += res + ","; } } Function_Trad func = ambit.getFuncion(id); if (func == null) { return(tabs + this.id + "(" + parametros_llam + ");\n"); } else { var parametros_padre = ""; cont = 0; if (func.EsHija) { Function_Trad funcpadres = ambit.getFuncion(func.Padre_inmediato); foreach (var item in funcpadres.Declaraciones) { cont++; Declaration_Trad dec = ((Declaration_Trad)item); if (cont == funcpadres.Declaraciones.Count) { parametros_padre += dec.Id; } else { parametros_padre += dec.Id + ","; } } } return(tabs + func.UniqId + "(" + parametros_llam + parametros_padre + ");\n"); } }