예제 #1
0
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
예제 #2
0
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)
예제 #3
0
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)
예제 #4
0
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
예제 #5
0
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
예제 #6
0
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