def gen_code(self): """ list of codes or variable name or single literal :return: """ child = self.childAt(0) if isinstance(child, IdNode): arr = self.childAt(1) if arr: return [Code(op='=[]', arg1=child.gen_code(), arg2=arr.gen_code(), tar=Code.gen_temp())] else: return [Code(op='=', arg1=child.gen_code(), tar=Code.gen_temp())] elif isinstance(child, LiteralNode): return [Code(op='=', arg1=child.gen_code(), tar=Code.gen_temp())] else: return child.gen_code()
def gen_code(self): codes = self.childAt(0).gen_code() for i in range(1, self.childCount() - 1, 2): op = self.childAt(i).gen_code() arg2 = self.childAt(i + 1).gen_code() arg1 = codes[len(codes) - 1].tar codes += arg2 codes.append(Code(op=op, arg1=arg1, arg2=arg2[len(arg2) - 1].tar, tar=Code.gen_temp())) return codes
def gen_code(self): codes = self.params.gen_code() if self.params else [] codes += [Code(op='=', arg1=Code.line + 3, tar='_ra')] codes.append(Code(op='c', tar='%s' % self.name)) codes.append(Code(op='=', arg1='_rv', tar=Code.gen_temp())) return codes