>>105839709
char sex;
Is context-sensitive thanks to typedef
You need the lexer to know the types you declared, thanks to ambiguities like:
foo * bar;
Is this foo multiplied by bar, or a foo pointer called bar?
This was not intended in the original C, but over time they added stuff without caring for parsers
This is unambiguous
let sex:char
let ass:char *
let bar: foo *
bar * sex
So the lexer doesn't need to be context-sensitive, and in fact you can parse with a LL(1) parser