コード例 #1
0
 def generarIf(self,cuadruplo, goto_end):
     op = cuadruplo.op
     change = False
     if op == '>':
         op = '<='
         change = True
     elif op == '<':
         op= '>='
         change = True
     elif op == '>=':
         op = '<'
         change = True
     elif op == '<=':
         op = '>'
         change = True
     elif op == '==':
         op = '!='
         change = True
     elif op =='!=':
         op  = '=='
         change = True
     
     if change:
         return Cuadruplo("if", "{0}{1}{2}".format( cuadruplo.arg1, op, cuadruplo.arg2),"goto" ,goto_end)
     elif cuadruplo.op == '=':
         return Cuadruplo("if","!"+cuadruplo.result,"goto",goto_end)
     else:
         return None
コード例 #2
0
    def traducir(self, tabla, arbol):
        super().traducir(tabla, arbol)
        res = ''
        indTemp1 = arbol.getLast()
        heapResultado = self.OperacionLogica.traducir(tabla, arbol)
        etiResultado1 = arbol.generarEtiqueta()
        indTemp2 = arbol.getLast()

        res = 'if {0} : goto .{1} \n'.format(heapResultado,
                                             etiResultado1)  # if tn : goto Ln
        arbol.add3D([res])
        arbol.agregarGeneral(0, 'if', heapResultado, etiResultado1)
        cuad = Cuadruplo('if', heapResultado, 'goto', etiResultado1)
        arbol.agregarCuadruplo(cuad)
        if indTemp1 == indTemp2:
            #Es un ID o un num
            arbol.agregarTripleta(0, 'if', heapResultado, indTemp1 + 3)
        else:
            indiceTemp = arbol.getLast()
            arbol.agregarTripleta(
                0, 'if', indiceTemp, indiceTemp + 3
            )  #obtener el Indice donde se debe de guarda el label de etiresultado1
        #Procesar otras Operaciones
        etiResultado2 = arbol.generarEtiqueta()

        res = 'goto .{0}\n'.format(
            etiResultado2)  # goto Ln+1--------> if tn: goto Ln \n goto Ln+1
        arbol.agregarGeneral(0, 'label', etiResultado2, '')
        arbol.agregarTripleta(0, 'label', etiResultado2, '')
        arbol.add3D([res])
        new_if = arbol.generarIF()
        cuad = Cuadruplo('goto', etiResultado2, '', '')
        arbol.agregarDicEtiqueta(cuad, new_if)

        res = 'label .{0}'.format(etiResultado1)
        arbol.add3D([res])
        arbol.agregarGeneral(0, 'label', etiResultado1, '')
        cuad = Cuadruplo('.', etiResultado1, '', 'label')
        #arbol.agregarCuadruplo(cuad)
        varexp = self.InstruccionesPL
        if type(self.InstruccionesPL) == list:
            for ins in self.InstruccionesPL:
                res += ins.traducir(tabla, arbol)
        else:
            res += ins.traducir(tabla, arbol)

        res = 'label .{0}'.format(etiResultado2)
        arbol.add3D([res])
        arbol.agregarGeneral(0, 'label', etiResultado2, '')
        cuad = Cuadruplo('.', etiResultado1, '', 'label')
        arbol.agregarCuadruplo(cuad)

        temp2 = arbol.getLast() + 1
        arbol.modificarTripleta(0, 'label', etiResultado2, '', temp2)
        return res
コード例 #3
0
ファイル: LogicaPL.py プロジェクト: sandymerida/tytus
    def traducir(self, tabla, arbol):
        super().traducir(tabla, arbol)
        indTemp = arbol.getLast(
        )  #sabiendo el numero de elementos dentro de la lista
        hop1 = self.opIzq.traducir(
            tabla,
            arbol)  # ---> Id, numero, .... Terminal  --->si se creo etiquita
        indTemp2 = arbol.getLast(
        )  # si ese numero cambio quiere decir que se genero una etiqueta o una tripleta
        indTri = False
        if indTemp != indTemp2:
            indTri = True  #OperadorIzq es una etiqueta

        hop2 = self.opDer.traducir(tabla, arbol)
        indTemp3 = arbol.getLast()
        indTri2 = False
        if indTemp2 != indTemp3:
            indTri2 = True

        h1 = arbol.generarHeap()
        ret2 = '{0} = {1} {2} {3}'.format(h1, hop1, self.operador, hop2)
        arbol.add3D([ret2])
        arbol.agregarGeneral(0, self.operador, hop1, hop2)
        cuad = Cuadruplo(self.operador, hop1, hop2, h1)
        arbol.agregarCuadruplo(cuad)
        if indTri2 and indTri:
            arbol.agregarTripleta(0, self.operador, indTemp2, indTemp3)
        elif indTri:
            arbol.agregarTripleta(0, self.operador, indTemp2, hop2)
        elif indTri2:
            arbol.agregarTripleta(0, self.operador, hop1, indTemp3)
        else:
            arbol.agregarTripleta(0, self.operador, hop1, hop2)
        return h1
コード例 #4
0
 def regla5(self):
     etiquetas = {}
     for etiqueta in self.etiquetas:
         etiquetas[etiqueta] = []
         for i in range(len(self.etiquetas[etiqueta])):
             ''
             if self.etiquetas[etiqueta][i].op == "if":
                 ''
                 if self.etiquetas[etiqueta][i].arg1 == "1==0":
                     ''
                     if i + 1 < len(self.etiquetas[etiqueta]):
                         ''
                         if self.etiquetas[etiqueta][i+1].op == "goto":
                             ''
                             new_cuadruplo = Cuadruplo("goto", self.etiquetas[etiqueta][i+1].arg1,"","")
                             etiquetas[etiqueta].append(new_cuadruplo)
                             self.add(self.etiquetas[etiqueta][i], 4)
                             continue
                         else:
                             ''
                     else:
                         ''
                 else:
                     ''
             etiquetas[etiqueta].append(self.etiquetas[etiqueta][i])
     return etiquetas
コード例 #5
0
    def regla1(self):
        etiquetas = {}
        cambios = {}
        for etiqueta in self.etiquetas:
            etiquetas[etiqueta] = []
            for cuadruplo in self.etiquetas[etiqueta]:
                ''#debemos ir buscando op con =
                pattern = r'(\$t[0-9]+)'
                match1 = re.match(pattern,str(cuadruplo.arg1))
                if cuadruplo.op == "=" and match1:
                    if len(etiquetas[etiqueta])!=0:
                        ant = etiquetas[etiqueta].pop()
                        if ant.result == cuadruplo.arg1 and (not '[' in cuadruplo.result) and (cuadruplo.arg2 !=" "):
                            self.add(ant,1)
                            cambios[ant.result] = cuadruplo.result
                            new = Cuadruplo(ant.op,ant.arg1,ant.arg2,cuadruplo.result)
                            etiquetas[etiqueta].append(new)
                            continue
                        else:
                            etiquetas[etiqueta].append(ant)
                        

                etiquetas[etiqueta].append(cuadruplo)

        return etiquetas
コード例 #6
0
    def traducir(self, tabla, arbol):
        super().traducir(tabla, arbol)
        vars = self.tipo.getTipo().value
        #print(vars.value)

        if vars < 9:
            res = '{0} = {1} \n'.format(self.id, '0')
            arbol.agregarTripleta(0, '=', self.id, '0')
            arbol.agregarGeneral(0, 'asig', self.id, '0')
            arbol.add3D([res])
            cuad = Cuadruplo('=', '0', '', self.id)
            arbol.agregarCuadruplo(cuad)

        elif vars > 8 and vars < 14:
            res = '{0} = {1} \n'.format(self.id, '""')
            arbol.agregarTripleta(0, '=', self.id, '""')
            arbol.agregarGeneral(0, 'asig', self.id, '0')
            arbol.add3D([res])
            cuad = Cuadruplo('=', '0', '""', self.id)
            arbol.agregarCuadruplo(cuad)

        elif vars == 18:
            res = '{0} = {1} \n'.format(self.id, 'False')
            arbol.agregarTripleta(0, '=', self.id, 'False')
            arbol.agregarGeneral(0, 'asig', self.id, 'False')
            arbol.add3D([res])
            cuad = Cuadruplo('=', '0', 'False', self.id)
            arbol.agregarCuadruplo(cuad)

        elif vars == 19:
            res = '{0} = {1} \n'.format(self.id, '0')
            arbol.agregarTripleta(0, '=', self.id, '0')
            arbol.agregarGeneral(0, 'asig', self.id, '0')
            arbol.add3D([res])
            cuad = Cuadruplo('=', '0', '0', self.id)
            arbol.agregarCuadruplo(cuad)
        else:
            arbol.agregarTripleta(0, '=', self.id, ' ')
            arbol.agregarGeneral(0, 'asig', self.id, ' ')
            res = '{0} = {1} \n'.format(self.id, ' ')
            arbol.add3D([res])
            cuad = Cuadruplo('=', '0', ' ', self.id)
            arbol.agregarCuadruplo(cuad)

        return res
コード例 #7
0
 def regla17(self):
     ''
     etiquetas = {}
     for etiqueta in self.etiquetas:
         etiquetas[etiqueta] = []
         for cuadruplo in self.etiquetas[etiqueta]:
             ''
             if cuadruplo.op =="*":
                 if str(cuadruplo.arg1) == "0":
                     self.add(cuadruplo,17)
                     etiquetas[etiqueta].append(Cuadruplo("=","0","", cuadruplo.result))
                     continue
                 if str(cuadruplo.arg2) == "0":
                     self.add(cuadruplo,17)
                     etiquetas[etiqueta].append(Cuadruplo("=","0", "", cuadruplo.result))
                     continue
             etiquetas[etiqueta].append(cuadruplo)
             
     return etiquetas
コード例 #8
0
    def traducir(self, tabla, arbol):
        super().traducir(tabla, arbol)
        res = ' '

        if self.Valores != None:
            ret = self.Valores.traducir(tabla, arbol)
            res += '{0} = {1} \n'.format(self.id, ret)
            cuad = Cuadruplo('=', ret, '', self.id)
            arbol.agregarCuadruplo(cuad)

        else:
            res = self.id
            cuad = Cuadruplo('=', '', '', self.id)
            arbol.agregarCuadruplo(cuad)

        arbol.add3D([res])
        arbol.agregarTripleta(0, '=', self.id, ret)
        arbol.agregarGeneral(0, '=', self.id, ret)

        return res
コード例 #9
0
    def traducir(self, tabla, arbol):
        super().traducir(tabla, arbol)
        res = ''

        indTemp1 = arbol.getLast()
        heapResultado = self.OperacionLogica.traducir(
            tabla, arbol)  # operacion_logica de la condicion del case
        indTemp2 = arbol.getLast()

        #Se verifica si en la condicion del when viene un terminal o una etiqueta
        if indTemp1 == indTemp2:  # When es terminal
            #arbol.modificarTripletaCase(None,heapResultado,None,None)
            etiResultado1 = arbol.generarEtiqueta()
            res = 'if {0} : goto {1}'.format(
                heapResultado, etiResultado1)  # tn = opCase == heapResultado
            arbol.add3D([res])
            arbol.agregarTripleta(0, 'if', heapResultado, indTemp1 + 3)
            arbol.agregarGeneral(0, 'if', heapResultado, etiResultado1)
            cuad = Cuadruplo('if', heapResultado, 'goto', etiResultado1)
            arbol.agregarCuadruplo(cuad)

        else:  # When trae una etiqueta
            #arbol.modificarTripletaCase(None,heapResultado,indTemp2,None)
            etiResultado1 = arbol.generarEtiqueta()
            res = 'if {0} : goto {1}'.format(
                heapResultado, etiResultado1)  # tn = opCase == heapResultado
            arbol.add3D([res])
            arbol.agregarTripleta(0, 'if', arbol.getLast(), indTemp2 + 4)
            arbol.agregarGeneral(0, 'if', heapResultado, etiResultado1)
            cuad = Cuadruplo('if', heapResultado, 'goto', etiResultado1)
            arbol.agregarCuadruplo(cuad)

        if self.ResultException != None:
            for resultExcs in self.ResultException:
                if type(resultExcs) == list:
                    for resultExc in resultExcs:
                        resultExc.traducir(tabla, arbol)
        else:
            resultExcs.traducir(tabla, arbol)
コード例 #10
0
    def regla7(self):
        ''
        etiquetas = {}
        eliminadas = {}
        for etiqueta in self.etiquetas:
            etiquetas[etiqueta] = []
            for cuadruplo in self.etiquetas[etiqueta]:
                if cuadruplo.op == "if":
                    ''
                    etiqueta_goto = cuadruplo.result
                    etiqueta_got = etiqueta_goto.replace('L', 'if')
                    try:
                        if 1 == len(self.etiquetas[etiqueta_goto]):
                            ''
                            goto_temp = self.etiquetas[etiqueta_goto][0]
                            if goto_temp.op == "goto":
                                ''
                                self.add(cuadruplo,7)
                                new_salto = Cuadruplo("if",cuadruplo.arg1,cuadruplo.arg2,goto_temp.arg1)
                                etiquetas[etiqueta].append(new_salto)
                                eliminadas[etiqueta_goto] = goto_temp.arg1
                                continue
                    except KeyError:
                        pass
                etiquetas[etiqueta].append(cuadruplo)
        #una vez terminado el proceso seguimos a eliminar las etiquetas que cambiaron
        for etiqueta in self.eliminadas:
            self.add(etiqueta + ":",6)
            del etiquetas[etiqueta]

        for etiqueta in eliminadas:
            if etiqueta in etiquetas:
                self.add(etiqueta + ":",7)
                del etiquetas[etiqueta]
        #recorremos la lista de nuevo en busca de if y goto que puedan tener las etiquetas
        indice = 0
        for salto in eliminadas:
            for etiqueta in etiquetas:
                indice = 0
                for cuadruplo in etiquetas[etiqueta]:
                    if cuadruplo.op == "if":
                        if cuadruplo.result == salto:
                             etiquetas[etiqueta][indice].result = eliminadas[salto]
                    elif cuadruplo.op == "goto":
                        if cuadruplo.arg1 == salto:
                            etiquetas[etiqueta][indice].arg1 = eliminadas[salto]
                    indice +=1
        
        return etiquetas
コード例 #11
0
    def traducir(self, tabla, arbol):
        super().traducir(tabla, arbol)
        ret= ' '
        
        if self.Valores != None:
            ret =self.Valores.traducir(tabla, arbol)

        res = '{0} = {1} \n'.format(self.id, ret)
        arbol.add3D([res])
        cuad = Cuadruplo('=', self.id, '',  ret)
        arbol.agregarCuadruplo(cuad)

        return res

        
コード例 #12
0
    def regla4(self):
        etiquetas = {}
        for etiqueta in self.etiquetas:
            etiquetas[etiqueta] = []
            for cuadruplo in self.etiquetas[etiqueta]:
                ''
                if cuadruplo.op == "if":
                    ''
                    if cuadruplo.arg1 == "1==1":
                        ''
                        new_cuadruplo = Cuadruplo("goto", cuadruplo.result,"","")
                        etiquetas[etiqueta].append(new_cuadruplo)
                        self.add(cuadruplo, 4)
                        continue
                etiquetas[etiqueta].append(cuadruplo)

        return etiquetas
コード例 #13
0
    def regla6(self):
        ''
        etiquetas = {}
        eliminadas = {}
        for etiqueta in self.etiquetas:
            etiquetas[etiqueta] = []
            for cuadruplo in self.etiquetas[etiqueta]:
                if cuadruplo.op == "goto":
                    ''
                    etiqueta_goto = cuadruplo.arg1
                    etiqueta_goto = etiqueta_goto.replace('L', 'if')
                    try:
                        if 1 == len(self.etiquetas[etiqueta_goto]):
                            ''
                            goto_temp = self.etiquetas[etiqueta_goto][0]
                            if goto_temp.op == "goto":
                                ''
                                self.add(cuadruplo,6)
                                new_salto = Cuadruplo("goto",goto_temp.arg1, "","")
                                etiquetas[etiqueta].append(new_salto)
                                eliminadas[etiqueta_goto] = goto_temp.arg1
                                continue
                    except KeyError:
                        pass
                etiquetas[etiqueta].append(cuadruplo)
        self.eliminadas = eliminadas
        indice = 0
        for salto in eliminadas:
            for etiqueta in etiquetas:
                indice = 0
                for cuadruplo in etiquetas[etiqueta]:
                    if cuadruplo.op == "if":
                        if cuadruplo.result == salto:
                             etiquetas[etiqueta][indice].result = eliminadas[salto]
                    elif cuadruplo.op == "goto":
                        if cuadruplo.arg1 == salto:
                            etiquetas[etiqueta][indice].arg1 = eliminadas[salto]
                    indice +=1

        return etiquetas
コード例 #14
0
ファイル: WhenPL.py プロジェクト: sandymerida/tytus
    def traducir(self, tabla, arbol):
        super().traducir(tabla, arbol)
        vars1 = arbol.getTripletaCase()
        #arbol.eliminarTripleta()
        indTemp1 = arbol.getLast()
        if self.ListOP != None:
            for listopp in self.ListOP:
                heapResultado = listopp.traducir(tabla, arbol)
        indTemp2 = arbol.getLast()

        if vars1.verficar(
                None, None, None,
                None):  #quiere decir que el case no tiene ID o Expresion
            if indTemp1 == indTemp2:
                etiResultado1 = arbol.generarEtiqueta()
                res = 'if {0} : goto {1}'.format(
                    heapResultado,
                    etiResultado1)  # tn = opCase == heapResultado
                arbol.add3D([res])
                arbol.agregarTripleta(0, 'if', heapResultado, indTemp1 + 3)
                arbol.agregarGeneral(0, 'if', heapResultado, etiResultado1)
                cuad = Cuadruplo('if', heapResultado, 'goto', etiResultado1)
                arbol.agregarCuadruplo(cuad)
            else:
                etiResultado1 = arbol.generarEtiqueta()
                res = 'if {} : goto {}'.format(heapResultado, etiResultado1)
                arbol.agregarTripleta(
                    0, 'if', indTemp2, indTemp2 + 3
                )  #obtener el Indice donde se debe de guarda el label de etiresultado1
                cuad = Cuadruplo('if', heapResultado, 'goto', etiResultado1)
                arbol.agregarCuadruplo(cuad)

        else:  #quiere decir que el case cuenta con una condicion debemos generar una nueva etiqueta si no es un ID o un num.
            if indTemp1 == indTemp2:  #when es un terminal
                if vars1.getOp1() == None:  #case es un terminal
                    etiResultado1 = arbol.generarEtiqueta()
                    heapResultado2 = arbol.generarHeap()  #tn....
                    res = '{0}={1}=={2}'.format(heapResultado2,
                                                vars1.getOper(),
                                                heapResultado)  #t1 = id==id2
                    arbol.add3D([res])
                    arbol.agregarTripleta(0, '==', vars1.getOper(),
                                          heapResultado)
                    arbol.agregarGeneral(
                        0, '==', vars1.getOper(),
                        heapResultado)  #ingresamos operacion de igualacion
                    cuad = Cuadruplo('==', vars1.getOper(), heapResultado,
                                     heapResultado2)
                    arbol.agregarCuadruplo(cuad)

                    res = 'if {0} : goto {1}'.format(
                        heapResultado2,
                        etiResultado1)  # tn = opCase == heapResultado
                    arbol.add3D([res])
                    arbol.agregarTripleta(0, 'if', heapResultado, indTemp1 + 4)
                    arbol.agregarGeneral(0, 'if', heapResultado, etiResultado1)

                    cuad = Cuadruplo('if', heapResultado2, 'goto',
                                     etiResultado1)
                    arbol.agregarCuadruplo(cuad)

                else:  #el case tiene una condicion con etiqueta y el when es un terminal

                    etiResultado1 = arbol.generarEtiqueta()
                    heapResultado2 = arbol.generarHeap()  #tn....
                    res = '{0}={1}=={2}'.format(heapResultado2,
                                                vars1.getOper(), heapResultado)
                    arbol.add3D([res])
                    arbol.agregarTripleta(0, '==', vars1.getOp1(),
                                          heapResultado)
                    arbol.agregarGeneral(
                        0, '==', vars1.getOper(),
                        heapResultado)  #ingresamos operacion de igualacion
                    cuad = Cuadruplo('==', vars1.getOper(), heapResultado,
                                     heapResultado2)
                    arbol.agregarCuadruplo(cuad)

                    res = 'if {0} : goto {1}'.format(
                        heapResultado2,
                        etiResultado1)  # tn = opCase == heapResultado
                    arbol.add3D([res])
                    arbol.agregarTripleta(0, 'if', arbol.getLast(),
                                          indTemp2 + 4)
                    arbol.agregarGeneral(0, 'if', heapResultado, etiResultado1)
                    cuad = Cuadruplo('if', heapResultado2, 'goto',
                                     etiResultado1)
                    arbol.agregarCuadruplo(cuad)

            else:  #el case tiene una condicion con etiqueta y el when es una etiqueta
                etiResultado1 = arbol.generarEtiqueta()
                heapResultado2 = arbol.generarHeap()  #tn....
                res = '{0}={1}=={2}'.format(heapResultado2, vars1.getOper(),
                                            heapResultado)
                arbol.add3D([res])
                arbol.agregarTripleta(0, '==', vars1.getOp1(), arbol.getLast())
                arbol.agregarGeneral(
                    0, '==', vars1.getOper(),
                    heapResultado)  #ingresamos operacion de igualacion
                cuad = Cuadruplo('==', vars1.getOper(), heapResultado,
                                 heapResultado2)
                arbol.agregarCuadruplo(cuad)

                res = 'if {0} : goto {1}'.format(
                    heapResultado2,
                    etiResultado1)  # tn = opCase == heapResultado
                arbol.add3D([res])
                arbol.agregarTripleta(0, 'if', arbol.getLast(), indTemp2 + 4)
                arbol.agregarGeneral(0, 'if', heapResultado, etiResultado1)
                cuad = Cuadruplo('if', heapResultado2, 'goto', etiResultado1)
                arbol.agregarCuadruplo(cuad)

        etiResultado2 = arbol.generarEtiqueta()
        new_end = arbol.generarEND()

        res = 'goto .{0}\n'.format(
            etiResultado2)  # goto Ln+1--------> if tn: goto Ln \n goto Ln+1
        arbol.agregarGeneral(0, 'label', etiResultado2, '')
        arbol.agregarTripleta(0, 'label', etiResultado2, '')
        arbol.add3D([res])
        cuad = Cuadruplo('goto', etiResultado2, '', '')
        new_if = arbol.generarIF()
        arbol.agregarDicEtiqueta(cuad, new_if)

        res = 'label .{0}'.format(etiResultado1)
        arbol.add3D([res])
        arbol.agregarGeneral(0, 'label', etiResultado1, '')
        cuad = Cuadruplo('.', etiResultado1, '', 'label')
        #new_if = arbol.generarIF()
        #arbol.agregarCuadruplo(cuad)
        #varexp = self.InstruccionesPL12
        if type(self.InstruccionPL12) == list:
            for ins in self.InstruccionPL12:
                res += ins.traducir(tabla, arbol)
        else:
            res += ins.traducir(tabla, arbol)

        res = 'label .{0}'.format(etiResultado2)
        arbol.add3D([res])
        arbol.agregarGeneral(0, 'label', etiResultado2, '')
        temp2 = arbol.getLast() + 1
        arbol.modificarTripleta(0, 'label', etiResultado2, '', temp2)
        new_end = arbol.generarEND()
        cuad = Cuadruplo('.', etiResultado1, '', 'label')
        #new_if = arbol.generarIF()
        arbol.agregarCuadruplo(cuad)
        return res
コード例 #15
0
    def regla3(self, pasada = 0):
        etiquetas = {}
        eliminadas = {}
        flag = False
        for etiqueta in self.etiquetas:
            if  not etiqueta in eliminadas:
                etiquetas[etiqueta] = []

                for i in range(len(self.etiquetas[etiqueta])):
                    if flag:
                        flag = False
                    else:
                        if self.etiquetas[etiqueta][i].op == "if":
                            if 0 != len(etiquetas[etiqueta]):
                                if i+1 < len(self.etiquetas[etiqueta]):
                                    if self.etiquetas[etiqueta][i+1].op == "goto":
                                        cuadruplo = etiquetas[etiqueta].pop()
                                        _if = self.etiquetas[etiqueta][i].result
                                        _if = _if.replace('L', 'if')
                                        goto_end = self.etiquetas[etiqueta][i+1]
                                        #generamos el nuevo if (negacion ) goto end
                                        new = self.generarIf(cuadruplo, goto_end.arg1)
                                        if not self.canChange(cuadruplo):
                                            etiquetas[etiqueta].append(cuadruplo)
                                        else:
                                            self.add(cuadruplo,3)
                                        if new:
                                            etiquetas[etiqueta].append(new)
                                            eliminadas[_if]=goto_end.arg1
                                            #obtendria todas las instrucciones del if
                                            for item in self.etiquetas[_if]:
                                                etiquetas[etiqueta].append(item)
                                            flag = True
                                            continue
                                    elif pasada == 0:
                                        cuadruplo = etiquetas[etiqueta].pop()
                                        self.add(cuadruplo,3)
                                        new = Cuadruplo("if", "{0}{1}{2}".format( cuadruplo.arg1, cuadruplo.op, cuadruplo.arg2),"goto" ,self.etiquetas[etiqueta][i].result)
                                        etiquetas[etiqueta].append(new)
                                        continue

                        etiquetas[etiqueta].append(self.etiquetas[etiqueta][i])


            else:
                etiquetas[etiqueta] = []
                #for cuadruplo in self.etiquetas[etiqueta]:
                    #self.add(cuadruplo,3)
        #una vez terminado el proceso seguimos a eliminar las etiquetas que cambiaron
        for etiqueta in eliminadas:
            self.add(etiqueta + ":",3)
            try:
                etiqueta = etiqueta.replace('L', 'if')
                del etiquetas[etiqueta]
            except KeyError:
                pass
        #recorremos la lista de nuevo en busca de if y goto que puedan tener las etiquetas
        for salto in eliminadas:
            for etiqueta in etiquetas:
                for cuadruplo in etiquetas[etiqueta]:
                    if cuadruplo.op == "if":
                        if cuadruplo.result == salto:
                            cuadruplo.result = eliminadas[salto]
                    elif cuadruplo.op == "goto":
                        if cuadruplo.arg1 == salto:
                            cuadruplo.arg1 = eliminadas[salto]

        return etiquetas