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):