def popRelop(main): POperSize = len(POper) if POperSize > 0: if (POper[POperSize - 1] == '>' or POper[POperSize - 1] == '>=' or POper[POperSize - 1] == '<' or POper[POperSize - 1] == '<=' or POper[POperSize - 1] == '==' or POper[POperSize - 1] == '<>'): right_operand = PilaO.pop() right_type = PTypes.pop() right_value = AVAIL.pop() left_operand = PilaO.pop() left_type = PTypes.pop() left_value = AVAIL.pop() operator = POper.pop() result_type = semantic(left_type, right_type, operator) if (result_type != 'error'): if left_value is not None and right_value is not None: if (operator == '>'): result = left_value > right_value elif (operator == '>='): result = left_value >= right_value elif (operator == '<'): result = left_value < right_value elif (operator == '<='): result = left_value <= right_value elif (operator == '=='): result = left_value == right_value elif (operator == '<>'): result = left_value != right_value if main: dir = memo.getVirtualMainTemp(result_type) memo.updateMainTempInMemory(result, dir, result_type) else: dir = memo.getVirtualTemp(result_type) memo.updateTempInMemory(result, dir, result_type) quadr = quadruple(len(Quad), operator, left_operand, right_operand, dir) Quad.append(quadr) PilaO.append(dir) AVAIL.append(result) PTypes.append(result_type) else: print("ERROR: Variable sin valor asignado.") sys.exit() else: print("ERROR: Type mismatch.") sys.exit()
def arregloCinco(main, base, tipo): aux1 = PilaO.pop() if main: t = memo.getVirtualMainTemp('int') else: t = memo.getVirtualTemp('int') quadr = quadruple(len(Quad), '+', aux1, 0, t) Quad.append(quadr) if main: dir = memo.getVirtualMainTemp('int') memo.updateMainTempInMemory(aux1, dir, 'int') else: dir = memo.getVirtualTemp('int') memo.updateTempInMemory(aux1, dir, 'int') quadr = quadruple(len(Quad), '+', t, base, dir) Quad.append(quadr) PilaO.append('(' + str(dir) + ')') PTypes.append(tipo) POper.pop()