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
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