Beispiel #1
0
 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()
Beispiel #2
0
    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
Beispiel #3
0
 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