================================================================================
Module Definition
================================================================================

module mod;
--------------------------------------------------------------------------------
(translation_unit
     (module_declaration
       (module_name
         (identifier))))

================================================================================
Module Definition with Export
================================================================================

export module mod;
--------------------------------------------------------------------------------
(translation_unit
     (module_declaration
       (module_name
         (identifier))))

================================================================================
Module Definition with Export and Partition
================================================================================

export module mod:mod;
--------------------------------------------------------------------------------

(translation_unit
     (module_declaration
       (module_name
         (identifier))
      (module_partition
       (module_name
         (identifier)))))

================================================================================
Module Definition with Export, Partition and Attribute
================================================================================

export module mod:mod [[attribute]];
--------------------------------------------------------------------------------

(translation_unit
  (module_declaration
    name: (module_name
      (identifier))
    partition: (module_partition
      (module_name
        (identifier)))
    (attribute_declaration
      (attribute
        name: (identifier)))))

================================================================================
import Declaration
================================================================================

import mod;
--------------------------------------------------------------------------------

(translation_unit
  (import_declaration
    name: (module_name
      (identifier))))

================================================================================
import Declaration with export
================================================================================

export import mod;
--------------------------------------------------------------------------------

(translation_unit
  (import_declaration
    name: (module_name
      (identifier))))

================================================================================
import Declaration partition with export
================================================================================

export import :mod;
--------------------------------------------------------------------------------

(translation_unit
  (import_declaration
    partition: (module_partition
      (module_name
        (identifier)))))

================================================================================
import Declaration headerunit with export
================================================================================

export import <iostream>;
--------------------------------------------------------------------------------

(translation_unit
  (import_declaration
    header: (system_lib_string)))

================================================================================
global module fragment
================================================================================

module;
--------------------------------------------------------------------------------

(translation_unit
  (global_module_fragment_declaration))

================================================================================
private module fragment
================================================================================

module :private;
--------------------------------------------------------------------------------

(translation_unit
  (private_module_fragment_declaration))


================================================================================
export declaration
================================================================================

export module A;

export char const* hello() { return "hello"; }

char const* world() { return "world"; }

export {
  int one() { return 1; }
  int zero() { return 0; }
}

export namespace hi {
char const* english() { return "Hi!"; }
char const* french() { return "Salut!"; }
}
--------------------------------------------------------------------------------

(translation_unit
  (module_declaration
    name: (module_name
      (identifier)))
  (export_declaration
    (function_definition
      type: (primitive_type)
      (type_qualifier)
      declarator: (pointer_declarator
        declarator: (function_declarator
          declarator: (identifier)
          parameters: (parameter_list)))
      body: (compound_statement
        (return_statement
          (string_literal
            (string_content))))))
  (function_definition
    type: (primitive_type)
    (type_qualifier)
    declarator: (pointer_declarator
      declarator: (function_declarator
        declarator: (identifier)
        parameters: (parameter_list)))
    body: (compound_statement
      (return_statement
        (string_literal
          (string_content)))))
  (export_declaration
    (function_definition
      type: (primitive_type)
      declarator: (function_declarator
        declarator: (identifier)
        parameters: (parameter_list))
      body: (compound_statement
        (return_statement
          (number_literal))))
    (function_definition
      type: (primitive_type)
      declarator: (function_declarator
        declarator: (identifier)
        parameters: (parameter_list))
      body: (compound_statement
        (return_statement
          (number_literal)))))
  (export_declaration
    (namespace_definition
      name: (namespace_identifier)
      body: (declaration_list
        (function_definition
          type: (primitive_type)
          (type_qualifier)
          declarator: (pointer_declarator
            declarator: (function_declarator
              declarator: (identifier)
              parameters: (parameter_list)))
          body: (compound_statement
            (return_statement
              (string_literal
                (string_content)))))
        (function_definition
          type: (primitive_type)
          (type_qualifier)
          declarator: (pointer_declarator
            declarator: (function_declarator
              declarator: (identifier)
              parameters: (parameter_list)))
          body: (compound_statement
            (return_statement
              (string_literal
                (string_content)))))))))
