It ingests tokens via a "token stream", and feeds out a node tree. It's a mostly handwritten recursive descent parser with the occasional Lisp macros for convenience.