def p_ctemem(p): ''' ctemem : ''' tipo = quad.gettipo(p[-1]) #Memoria Virtual dir = mv.getMemoCte(tipo) temp = Tablas.cteInsert(p[-1], tipo, dir) if (temp == False): mv.restMemo(tipo)
def p_vardim(p): ''' vardim : ''' Tablas.isVector = p[-2] tipo = quad.gettipo(0) dir = mv.getMemoCte(tipo) temp = Tablas.cteInsert(0, tipo, dir) if (temp == False): mv.restMemo(tipo)
def p_tammatriz(p): ''' tammatriz : ''' tipo = quad.gettipo(p[-1]) tipo2 = quad.gettipo(p[-4]) #Memoria Virtual dir = mv.getMemoCte(tipo) temp = Tablas.cteInsert(p[-1], tipo, dir) if (temp == False): mv.restMemo(tipo) dir2 = mv.getMemoCte(tipo2) temp2 = Tablas.cteInsert(p[-4], tipo2, dir2) if (temp2 == False): mv.restMemo(tipo2) Tablas.vectSize = (p[-1]+1)*(p[-4]+1) Tablas.m = Tablas.vectSize/(p[-4]-0+1) tipo = quad.gettipo(Tablas.vectSize) tipo2 = quad.gettipo(Tablas.m) dir = mv.getMemoCte(tipo) temp = Tablas.cteInsert(Tablas.vectSize, tipo, dir) if (temp == False): mv.restMemo(tipo) dir2 = mv.getMemoCte(tipo2) temp2 = Tablas.cteInsert(Tablas.m, tipo2, dir2) if (temp2 == False): mv.restMemo(tipo2) Tablas.isVector = 2
def addToFor(glob): result_type = 'int' result = mv.getMemoTemp(result_type, glob, 1) if (glob): Tabla.gtempAddSize(result_type, 1) else: Tabla.tempAddSize(result_type, 1) left_operand = desde.pop() dir = mv.getMemoCte('int') temp = Tabla.cteInsert(1, 'int', dir) if (temp == False): mv.restMemo('int') right_operand = Tabla.findCteVM(1) temp = cuadruplo.cuadruplo(count - 1, '+', left_operand, right_operand, result) desde.append(left_operand) desde.append(result) Quad.append(temp) return True
def p_tamvector(p): ''' tamvector : ''' tipo = quad.gettipo(p[-2]) #Memoria Virtual dir = mv.getMemoCte(tipo) temp = Tablas.cteInsert(p[-2], tipo, dir) if (temp == False): mv.restMemo(tipo) Tablas.vectSize = p[-2]+1 Tablas.m = 1 tipo = quad.gettipo(Tablas.vectSize) tipo2 = quad.gettipo(Tablas.m) dir = mv.getMemoCte(tipo) temp = Tablas.cteInsert(Tablas.vectSize, tipo, dir) if (temp == False): mv.restMemo(tipo) dir2 = mv.getMemoCte(tipo2) temp2 = Tablas.cteInsert(Tablas.m, tipo2, dir2) if (temp2 == False): mv.restMemo(tipo2) Tablas.isVector = 1
def p_varaux3(p): ''' varaux3 : ID | ID LCORCH vardim CTE_I RCORCH tamvector | ID LCORCH vardim CTE_I RCORCH LCORCH CTE_I tammatriz RCORCH ''' salto = 1 if Tablas.isGlobal == True: if Tablas.isVector != None: if Tablas.isVector == 1: if p[4]<1: print("Error: No se puede declarar una matriz o vector con tamaño 0.") sys.exit() dir1 = Tablas.findCteVM(p[4]) m = Tablas.findCteVM(Tablas.m) size = Tablas.findCteVM(Tablas.vectSize) temp = vect.vector(p[1],dir1,None, m, size) salto = Tablas.vectSize dir = mv.getMemoGlob(Tablas.myType, salto) Tablas.vectGTable[dir] = temp tipo = quad.gettipo(dir) dirTemp = mv.getMemoCte(tipo) temp = Tablas.cteInsert(dir, tipo, dirTemp) if (temp == False): mv.restMemo(tipo) elif Tablas.isVector == 2: if p[4]<1 or p[7]<1: print("Error: No se puede declarar una matriz o vector con tamaño 0.") sys.exit() dir1 = Tablas.findCteVM(p[4]) dir2 = Tablas.findCteVM(p[7]) m = Tablas.findCteVM(Tablas.m) size = Tablas.findCteVM(Tablas.vectSize) temp = vect.vector(p[1],dir1,dir2, m, size) salto = Tablas.vectSize dir = mv.getMemoGlob(Tablas.myType, salto) Tablas.vectGTable[dir] = temp tipo = quad.gettipo(dir) dirTemp = mv.getMemoCte(tipo) temp = Tablas.cteInsert(dir, tipo, dirTemp) if (temp == False): mv.restMemo(tipo) else: dir = mv.getMemoGlob(Tablas.myType, salto) else: if Tablas.isVector != None: if Tablas.isVector == 1: if p[4]<1: print("Error: No se puede declarar una matriz o vector con tamaño 0.") sys.exit() dir1 = Tablas.findCteVM(p[4]) m = Tablas.findCteVM(Tablas.m) size = Tablas.findCteVM(Tablas.vectSize) temp = vect.vector(p[1],dir1,None, m, size) salto = Tablas.vectSize dir = mv.getMemoLoc(Tablas.myType, salto) Tablas.vectLTable[dir] = temp tipo = quad.gettipo(dir) dirTemp = mv.getMemoCte(tipo) temp = Tablas.cteInsert(dir, tipo, dirTemp) if (temp == False): mv.restMemo(tipo) elif Tablas.isVector == 2: if p[4]<1 or p[7]<1: print("Error: No se puede declarar una matriz o vector con tamaño 0.") sys.exit() dir1 = Tablas.findCteVM(p[4]) dir2 = Tablas.findCteVM(p[7]) m = Tablas.findCteVM(Tablas.m) size = Tablas.findCteVM(Tablas.vectSize) temp = vect.vector(p[1],dir1,dir2, m, size) salto = Tablas.vectSize dir = mv.getMemoLoc(Tablas.myType, salto) Tablas.vectLTable[dir] = temp tipo = quad.gettipo(dir) dirTemp = mv.getMemoCte(tipo) temp = Tablas.cteInsert(dir, tipo, dirTemp) if (temp == False): mv.restMemo(tipo) else: dir = mv.getMemoLoc(Tablas.myType, salto) Tablas.insert(p[1], Tablas.myType, dir, salto) Tablas.isVector = None