I second that recommendation, with a preemptive shush to anyone was about to whine that it spends so much time covering parser generators. Those algorithms may be old hat, but they're nonetheless enlightening once you understand why they work.
I do wish they covered optimization in more depth, though.
I do wish they covered optimization in more depth, though.