Пример #1
0
    def traducir(self,ent):
        'traduccion proc'
        nl=ent.newlabel()
        cad='goto ' + nl+'\n'
        cad+='label '+ent.newlabel('p_'+self.nombre)+'\n'
        cont=0
        lenparams=0
        if self.params != None:
            lenparams=len(self.params)

        for i in range(0,lenparams):
            val='stack['+str(i)+']'
            term=Terminal(Tipo('stack',None,-1,-1),val)
            d=Declaracion(self.params[i].nombre,False,self.params[i].tipo,term)
            c3d=d.traducir(ent).codigo3d
            cad+=c3d
            cont=i

        if self.instrucciones!=None:
            for inst in self.instrucciones:
                if inst !=None:
                    c3d= inst.traducir(ent).codigo3d
                    cad+=c3d
        cad+='temp=stack['+str(lenparams)+']\n'
        cad+='stack=[]\n'
        cad+='goto temp\n'
        cad+='label ' +nl+'\n'
        self.codigo3d=cad
        self.ejecutar(ent)
        return self
Пример #2
0
    def traducir(self, ent):
        'traduccion func'
        nl = ent.newlabel()
        cad = 'goto ' + nl + '\n'
        cad += 'label ' + ent.newlabel('f_' + self.nombre) + '\n'
        cont = 0
        lenparams = 0
        if self.params != None:
            lenparams = len(self.params)

        for i in range(0, lenparams):
            val = 'stack[' + str(i) + ']'
            term = Terminal(Tipo('stack', None, -1, -1), val)
            d = Declaracion(self.params[i].nombre, False, self.params[i].tipo,
                            term)
            c3d = d.traducir(ent).codigo3d
            cad += c3d
            cont = i

        if self.instrucciones != None:
            for inst in self.instrucciones:
                if inst != None:
                    c3d = inst.traducir(ent).codigo3d
                    cad += c3d
        cad += 'temp=stack[' + str(lenparams) + ']\n'
        cad += 'stack=[]\n'
        cad += 'goto temp\n'
        cad += 'label ' + nl + '\n'
        self.codigo3d = cad

        # string quemado
        sql = 'ci.ejecutarsql("create function ' + self.nombre + '('
        if self.params != None:
            for i in range(0, len(self.params)):
                if i > 0:
                    sql += ','
                if self.params[i].modo != None:
                    sql += 'inout '

                sql += self.params[i].nombre + ' ' + self.params[i].tipo.tipo

        sql += ') returns ' + self.tipo.tipo + ' as $$ '

        if self.instrucciones != None:
            for ins in self.instrucciones:
                sql += ins.traducir(ent).stringsql
        sql += ' $$ language plpgsql;\")\n'
        self.codigo3d = sql + self.codigo3d
        return self