How I accidentally learned Prolog
Implementing patience diff
The patience diff algorithm
Packrat parsing: a top-down performance improvement
Precedence and associativity in recursive descent
Introduction to parser combinators
Why merges fail and what can be done about it
Merging with diff3
Myers diff in linear space: implementation
Myers diff in linear space: theory