def expStep7():
    """ insertar cuadruplos de moperador OR con chequeo semantico """
    global Resultado
    size = len(Poper)
    if size > 0:
        if Poper[size - 1] != '(':
            if Poper[size - 1] == '||':
                print("ENTRE A 7")
                tempR = PilaO.pop()
                rType = Ptypes.pop()
                tempL = PilaO.pop()
                lType = Ptypes.pop()
                operator = Poper.pop()
                result_type = oraculo[operator][lType][rType]
                if result_type != 'error':
                    Resultado = getAvail(result_type)
                    table.contadorERAlocalTemporal(result_type)
                    quadInsert(operator, tempL, tempR, Resultado)
                    PilaO.append(Resultado)
                    Ptypes.append(result_type)
                    #Prueba Resultado
                    Resultado = Resultado + 1
                    return True
                else:
                    print("ERROR: typemismatch :", tempL, lType, operator,
                          tempR, rType)
                    sys.exit()
    return False
Esempio n. 2
0
def p_idCallaux3(p):
    '''
    idCallaux3 : 
    '''
    condicion = table.dirFuncs[table.programa].searchIfExists(p[-10])
    if(condicion == False):
        limInf = table.dictCte[0]
        limSup = table.dictCte[table.dirFuncs[table.auxFunc].dir_var[p[-10]].dim[1]]
        dim1 = table.dictCte[table.dirFuncs[table.auxFunc].dir_var[p[-10]].dim[0]]
        dirBase = table.dirFuncs[table.auxFunc].dir_var[p[-10]].dir
    else:
        limInf = table.dictCte[0]
        limSup = table.dictCte[table.dirFuncs[table.programa].dir_var[p[-10]].dim[1]]
        dim1 = table.dictCte[table.dirFuncs[table.programa].dir_var[p[-10]].dim[0]]
        dirBase = table.dirFuncs[table.programa].dir_var[p[-10]].dir
    resultExp2 = cuad.PilaO.pop()
    result_type2 = cuad.Ptypes.pop()
    resultExp1 = cuad.PilaO.pop()
    result_type = cuad.Ptypes.pop()
    if (result_type2 == 'int' and result_type == 'int'):
        acceso = table.accessPointer + mem.basePointer
        table.accessPointer = table.accessPointer +1
        cuad.quadInsert("VER", resultExp2, limInf, limSup)
        cuad.contQuad = cuad.contQuad + 1
        #desplazamiento = resultExp2*dim1+resultExp1
        temp = cuad.getAvail('int')
        table.contadorERAlocalTemporal('int')
        cuad.quadInsert('*',resultExp2, dim1, temp)
        cuad.contQuad = cuad.contQuad + 1
        temp2 = cuad.getAvail('int')
        table.contadorERAlocalTemporal('int')
        cuad.quadInsert('+',temp, resultExp1, temp2)
        cuad.contQuad = cuad.contQuad + 1
        pointerBase = table.dictCte.get(dirBase)
        cuad.quadInsert('+t',temp2, pointerBase, acceso)
        cuad.contQuad = cuad.contQuad + 1

        cuad.PilaO.pop()
        cuad.Ptypes.pop()

        cuad.pushPilaO(acceso)
        cuad.pushType(result_type)

    else:
        print("ERROR : No se puede accesar a un arreglo/Matriz en indice diferente a integer")
        sys.exit()
def stepFor1():
    global Resultado
    tempR = PilaO.pop()
    rType = Ptypes.pop()
    tempL = PilaO.pop()
    lType = Ptypes.pop()
    result_type = oraculo['<'][lType][rType]
    if result_type != 'error':
        Resultado = getAvail(result_type)
        table.contadorERAlocalTemporal(result_type)
        quadInsert('<', tempL, tempR, Resultado)
        PilaO.append(Resultado)
        Ptypes.append(result_type)
        return True
    else:
        print("ERROR: type mismatch, For")
        sys.exit()


#? CUADRUPLOS DE LLAMADA DE FUNCION Y ARREGLOS ESTAN EN EL PARSER!
Esempio n. 4
0
def p_coherenceGo(p):
    '''
    coherenceGo :
    '''
    params = table.dirFuncs[cuad.pointerParam].params
    tam = len(params)
    if(cuad.paramK < tam):
        print("ERROR: faltaron parametros")
        sys.exit()
    cuad.quadInsert('GOSUB', None, None , cuad.pointerParam)
    cuad.contQuad = cuad.contQuad + 1
    #Parche Guadalupano
    tipoRet = table.dirFuncs[cuad.pointerParam].type
    if(tipoRet != 'void'):
        Guadalupano = cuad.getAvail(tipoRet)
        table.contadorERAlocalTemporal(tipoRet)
        func = table.dirFuncs[table.programa].dir_var.get(cuad.pointerParam)
        funcDir= func.dir
        cuad.quadInsert('=', funcDir, None , Guadalupano)
        cuad.pushPilaO(Guadalupano)
        cuad.pushType(tipoRet)
        cuad.contQuad = cuad.contQuad + 1