def build_top_level(ast, unit): # Extract package declaration, if it exists. pkg = ASTNode('PackageDeclaration') package_decl = unit.find_child('PackageDeclaration') if package_decl is not None: #pkg.children = flatten_name(package_decl[1]) pkg = flatten(package_decl[1], 'PackageDeclaration', 'Identifier') ast.add(pkg) # Extract imports, if they exist. typ_imports = ASTNode('TypeImports') pkg_imports = ASTNode('PackageImports') import_decl = unit.find_child('ImportDeclarations') if import_decl is not None: typ_imports.children, pkg_imports.children = flatten_imports(import_decl) ast.add(typ_imports) ast.add(pkg_imports) # Extract type declaration. typ_decl = unit.find_child('TypeDeclarations') if typ_decl is not None and typ_decl[0][0].name != 'SemiColon': if typ_decl[0][0].name == 'ClassDeclaration': typ = build_class_structure(typ_decl[0][0]) elif typ_decl[0][0].name == 'InterfaceDeclaration': typ = build_interface_structure(typ_decl[0][0]) ast.add(typ) return ast