A Ruby DSL for building SAX parsers