def p_Asignacion(p): '''Asignacion : faID Factor5 Asignacion2''' ID = avail.IDPila_pop() if (idF == "asig"): TDim = avail.DPila_pop() variables_declaradas(ID) if (avail.DPila_pop()): if (TDim): par = avail.OPila_pop() par2 = avail.OPila_pop() avail.OPila_push(par) avail.TPila_push(tipo_variable(ID, "var")) avail.OPila_push(dir_var(ID)) avail.OPila_push(par2) avail.dim(dimension(ID), avail.OPila_pop()) avail.asign(avail.OPila_pop()) else: par = avail.OPila_pop() par2 = avail.OPila_pop() par3 = avail.OPila_pop() avail.OPila_push(par) avail.OPila_push(par2) avail.TPila_push(tipo_variable(ID, "var")) avail.OPila_push(dir_var(ID)) avail.OPila_push(par3) avail.dmT(dimension(ID), avail.OPila_pop()) avail.asign(avail.OPila_pop()) avail.asign(avail.OPila_pop()) else: avail.asign(dir_var(ID)) else: if (ID not in direc): print "Funcion no declarada", ID sys.exit(0) else: if ((len(direc[ID][0])) != len(CHF)): print "Error de llamada de funcion, ", ID sys.error(0) else: cont = 0 for key in direc[ID][0]: if (direc[ID][0][key][0] != CHF[cont]): print "Error de tipo de llamada de funcion" sys.error(0) cont += 1 CHF[:] = []
def p_Asignacion(p): '''Asignacion : faID Factor5 Asignacion2''' ID = avail.IDPila_pop() if(idF == "asig"): TDim = avail.DPila_pop() variables_declaradas(ID) if(avail.DPila_pop()): if(TDim): par = avail.OPila_pop() par2 = avail.OPila_pop() avail.OPila_push(par) avail.TPila_push(tipo_variable(ID, "var")) avail.OPila_push(dir_var(ID)) avail.OPila_push(par2) avail.dim(dimension(ID), avail.OPila_pop()) avail.asign(avail.OPila_pop()) else: par = avail.OPila_pop() par2 = avail.OPila_pop() par3 = avail.OPila_pop() avail.OPila_push(par) avail.OPila_push(par2) avail.TPila_push(tipo_variable(ID, "var")) avail.OPila_push(dir_var(ID)) avail.OPila_push(par3) avail.dmT(dimension(ID), avail.OPila_pop()) avail.asign(avail.OPila_pop()) avail.asign(avail.OPila_pop()) else: avail.asign(dir_var(ID)) else: if(ID not in direc): print "Funcion no declarada", ID sys.exit(0) else: if((len(direc[ID][0])) != len(CHF)): print "Error de llamada de funcion, ", ID sys.error(0) else: cont = 0 for key in direc[ID][0]: if(direc[ID][0][key][0] != CHF[cont]): print "Error de tipo de llamada de funcion" sys.error(0) cont += 1 CHF[:] = []
def p_Factor4(p): '''Factor4 : varCte | faID Factor5''' if (len(p) == 3): ID = avail.IDPila_pop() DimM = avail.DPila_pop() if (DimM): apuntador = avail.OPila_pop() variables_declaradas(ID) avail.TPila_push(tipo_variable(ID, "var")) avail.OPila_push(dir_var(ID)) if (DimM): avail.dim(dimension(ID), apuntador) if not DimM: if avail.DPila_pop(): avail.OPila_pop() avail.TPila_pop()
def p_Factor4(p): '''Factor4 : varCte | faID Factor5''' if(len(p) == 3): ID = avail.IDPila_pop() DimM = avail.DPila_pop() if(DimM): apuntador = avail.OPila_pop() variables_declaradas(ID) avail.TPila_push(tipo_variable(ID, "var")) avail.OPila_push(dir_var(ID)) if(DimM): avail.dim(dimension(ID), apuntador) if not DimM: if avail.DPila_pop(): avail.OPila_pop() avail.TPila_pop()