def p_pN56(p): ''' pN56 : ''' global nombreFunc, idArray, temTipoCTE for x in directorio.funcionLista[nombreFunc]['variables']: if directorio.funcionLista[nombreFunc]['variables'][x][ 'dirMemoria'] == idArray: Li = directorio.funcionLista[nombreFunc]['variables'][x][ 'varsDim']['Li'] Ls = directorio.funcionLista[nombreFunc]['variables'][x][ 'varsDim']['Ls'] k = directorio.funcionLista[nombreFunc]['variables'][x]['varsDim'][ '-k'] BASE = directorio.funcionLista[nombreFunc]['variables'][x][ 'dirMemoria'] cuad.agregarCuad('VER', cuad.PilaO[len(cuad.PilaO) - 1], Li, Ls) aux1 = cuad.PilaO.pop() #sacar el tipo que viene de exp cuad.PTypes.pop() temTipoCTE = tipo = cuad.PTypes.pop() T = mem.generaDirTemporal(tipo) cuad.agregarCuad('+k', aux1, k, T) T2 = mem.generaDirTemporal(tipo) cuad.agregarCuad('+DirBASE', T, BASE, T2) cuad.PilaO.append('(' + str(T2) + ')') cuad.PTypes.append(tipo) #print('56',cuad.PTypes) cuad.POper.pop()
def p_pN23_LUCIA(p): ''' pN23_LUCIA : ''' try: cuad.POper[len(cuad.POper) - 1] except IndexError: print("pila vacia") else: if cuad.POper[len(cuad.POper) - 1] == '>' or cuad.POper[ len(cuad.POper) - 1] == '<' or cuad.POper[ len(cuad.POper) - 1] == '>=' or cuad.POper[ len(cuad.POper) - 1] == '<=' or cuad.POper[ len(cuad.POper) - 1] == '==' or cuad.POper[len(cuad.POper) - 1] == '!=': cuad.right_operand = cuad.PilaO.pop() cuad.right_type = cuad.PTypes.pop() cuad.left_operand = cuad.PilaO.pop() cuad.left_type = cuad.PTypes.pop() operator = cuad.POper.pop() result_type = cubo.sem_cubo[cuad.left_type][ cuad.right_type][operator] if result_type != 'error': result = mem.generaDirTemporal(result_type) cuad.contCuad = cuad.contCuad + 1 cuad.agregarCuad(operator, cuad.left_operand, cuad.right_operand, result) cuad.PilaO.append(result) cuad.PTypes.append(result_type) else: print("HORROR DE TIPOS") sys.exit()
def p_pN44(p): ''' pN44 : ''' global nombre, temTipoCTE #print('pN44') #print(nombre,directorio.funcionLista[nombre]['tipo']) #cuad.PilaO.append(nombre) result_type = directorio.funcionLista['MAIN']['variables'][nombre]['tipo'] result = mem.generaDirTemporal(result_type) cuad.agregarCuad( '=', directorio.funcionLista['MAIN']['variables'][nombre]['dirMemoria'], '', result) cuad.contCuad += 1 cuad.PilaO.append(result) temTipoCTE = directorio.funcionLista[nombre]['tipo']
def p_pN42(p): ''' pN42 : ''' if cuad.POper[len(cuad.POper) - 1] == 'AND' or cuad.POper[len(cuad.POper) - 1] == 'OR': cuad.right_operand = cuad.PilaO.pop() cuad.right_type = cuad.PTypes.pop() cuad.left_operand = cuad.PilaO.pop() cuad.left_type = cuad.PTypes.pop() operator = cuad.POper.pop() result_type = cubo.sem_cubo[cuad.left_type][cuad.right_type][operator] if result_type != 'error': result = mem.generaDirTemporal(result_type) cuad.contCuad = cuad.contCuad + 1 cuad.agregarCuad(operator, cuad.left_operand, cuad.right_operand, result) cuad.PilaO.append(result) cuad.PTypes.append(result_type) else: print("HORROR DE TIPOS") sys.exit()