1.3 Rule Inlining unmanaged_type

We start here with the two saved unmanaged_type and array_type rules. We remove the left-recursion from array_type and simplify it to

array_type
    :   (type_name
        |    simple_type
        |    enum_type
        |    class_type
        |    interface_type
        |    delegate_type
        |    type_parameter
        |    unmanaged_type STAR
        |    VOID STAR
        ) (INTERR* rank_specifier)+
    ;

Then we only need to inline it and simplify unmanaged_type to

unmanaged_type
    :    type_name (INTERR | rank_specifier)*
    |    simple_type (INTERR | rank_specifier)*
    |    enum_type (INTERR | rank_specifier)*
    |    class_type (INTERR | rank_specifier)*
    |    interface_type (INTERR | rank_specifier)*
    |    delegate_type (INTERR | rank_specifier)*
    |    type_parameter (INTERR | rank_specifier)*
    |    unmanaged_type STAR (INTERR | rank_specifier)*
    |    VOID STAR (INTERR | rank_specifier)*
    ;

Now SLRR and simplification steps have to be repeated:

unmanaged_type
    :   (type_name
        |    simple_type
        |    enum_type
        |    class_type
        |    interface_type
        |    delegate_type
        |    type_parameter
        |    VOID STAR
        ) (STAR | INTERR | rank_specifier)*
    ;

Sections

My siblings (including me):