int * - pointer to int.
int const * - pointer to const int.
int * const - const pointer to int.
int const * const - const pointer to const int.
I'm not sure what type of grammar could have been used to make this easier. Nobody said that indirection is easy, but indirection IS essential.