A library for building recursive-descent parsers