Eliminate the separate lexer module and its dynamic token allocation by moving token types, lexer state, and parsing functions directly into compiler.c. The compiler now receives a raw source string and length, lexes tokens on the fly into a stack-allocated Token struct, and discards the Buffer abstraction, token linked list, and associated memory management routines.