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
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!
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