public override Result GetC3D(Ent e, bool funcion, bool ciclo, bool isDeclaracion, bool isObjeto, LinkedList <Error> errores) { if (!isDeclaracion) { Debugger(e, "Asignacion"); } Result result = new Result(); if (!isDeclaracion) { Aritmetica operacion = new Aritmetica(Objetivo, Valor, Op, Linea, Columna); Result rsOperacion = operacion.GetC3D(e, funcion, ciclo, isObjeto, errores); if (rsOperacion != null) { if (!operacion.GetTipo().IsIndefinido()) { if (Objetivo is Identificador) { ((Identificador)Objetivo).Acceso = false; } else if (Objetivo is Referencia) { ((Referencia)Objetivo).Acceso = false; } Result rsObjetivo = Objetivo.GetC3D(e, funcion, ciclo, isObjeto, errores); if (operacion.GetTipo().Tip == Objetivo.GetTipo().Tip) { result.Codigo += rsOperacion.Codigo; result.Codigo += rsObjetivo.Codigo; result.Codigo += rsObjetivo.Valor + " = " + rsOperacion.Valor + ";\n"; } else { errores.AddLast(new Error("Semántico", "El valor a asignar no es del mismo tipo.", Linea, Columna)); return(null); } } } } return(result); }