def emit_classes (self, self_contained = False): code_list = ["#! /usr/bin/env python"] if self_contained: code_list += ["class AST (object):", ["def __eq__ (self, other):", ["return ((type(self) == type(other))", ["and (self.__dict__ == other.__dict__))"]], ], "", ] else: code_list += ["from basil.lang.asdl.AST import AST", ""] # __________________________________________________ self.base_classes.sort() for base_class_name in self.base_classes: code_list += ["class %s (AST):" % base_class_name, ["pass"], ""] # __________________________________________________ class_names = self.classes.keys() class_names.sort() for class_name in class_names: base_class, class_body = self.classes[class_name] if base_class is None: base_class = "AST" code_list += ["class %s (%s):" % (class_name, base_class), class_body, ""] return "\n".join(pgen2LL1.gen_code_lines(code_list))
def main (*args): import pprint handler = MetaASDLHandler() for arg in args: pt = asdl.parse(arg) module = handler.handle(pt) print module.emit_md() for ty in module._types: print ty.emit_md() print print "\n".join(pgen2LL1.gen_code_lines(module.emit_code()))
def emit_code (self, *args, **kws): code_lines = ["#! /usr/bin/env python", "", "from basil.lang.asdl.AST import AST", ""] for module in self.modules: module.emit_code(code_lines) return "\n".join(pgen2LL1.gen_code_lines(code_lines))