The C language is quite another matter, as you'll see. Texts on
C rarely include a BNF definition of the language. Probably
that's because the language is quite hard to write BNF for.
(This book didn't exist when the tutorial was written)
x * y;
If your lexer can distinguish type names from other identifiers, the problem is solved, and you can use BNF from there.