Structure and Interpretation of Computer Programs (SICP), by Abelson, Sussman, and Sussman.
A Scheme-centric view of programming languages, used in first-year classes
at MIT. Full text available online for free - and legally!
The Python Tutorial. We'll
be using Python to examine a few advanced programming features such as
list comprehensions and generators. Of course this tutorial is also free
online.
99 Bottles of Beer
This Website holds a collection of the Song 99 Bottles of Beer
programmed in
different programming languages. Actually the song is
represented in 1434 (and counting!)
different programming languages and variations.
Guts: Lexical Analysis -
The Perl Journal, Fall 1998.
This is a nice informal discussion of some of the complexities
in Perl's lexical analyzer. The interesting thing is that
lexical analysis in Perl is context dependent; so that a "{"
in one place is actually a different token than a "{" in
another place. Most programming languages are not written
that way.
In case you feel I'm short-changing parsing, how about the
yacc file (bison is gnu's version of yacc) for Perl:
perl.y.
Notice that it makes heavy use of associativity and
precedence declarations so that the grammar itself stays simple.
Yacc's shift-reduce parser uses these declarations to
resolve parsing "conflicts", i.e. to make the parse tree unique.