示例#1
0
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()
示例#2
0
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()
示例#3
0
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']
示例#4
0
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()