from lisp_parser import parser #if __name__ == "main": print parser.parse('(hex 200)')
def rc(str): return compile_lisp(parser.parse(str))
pass def list_callback(node): if node.car.cdr: node.car.cdr = node.car.cdr.car assert node.car.name == "s_expr" for child in iter_cdr(node.car, reverse=True): if child.name == "s_expr": s_expr = child assert s_expr.name == "s_expr" if s_expr.cdr and s_expr.cdr.name == "s_expr": s_expr.cdr = s_expr.cdr.car s_expr.car.cdr = s_expr.cdr assert node.car.name == "s_expr" node.car = node.car.car def s_expr_callback(node): pass parser.callback_map["list"] = list_callback parser.callback_map["s_expr"] = s_expr_callback parser.callback_map["program"] = program_callback parse_tree = Graph(parser.parse()) ast_tree = create_ast(parse_tree) convert_lists(ast_tree) print_tree(ast_tree)