The Dragon Book orthodoxy for handling source code is a regex-based lexer and an LR parser, in series, with no feedback between them and no weird edge cases.
What widely used languages can _really_ be parsed this way? So many major languages can't: type name ambiguity, context-sensitive lexing of >>, offside rule, conditionally significant newlines, …
(Not counting really simple things like Lisp: something with a grammar the size of C, suitable as a full-scale example for a parser generator.)