This is a library for "parsing" clojure data structures, with the intention of making it easier to describe and extract the components of complex macros (though it of course need not be used for macro definitions). It uses the parsatron parsing library.
Several combinators useful for parsing generally, and specifically for
parsing data structures, can be found in macroparser.parsers. Other
namespaces contain pre-defined parsers for binding forms, pairs, and
vectors and for parsing defn
, fn
, and fn*
forms. These can be
used as-as (in the case of binding vectors) or consulted as models for
defining derived function definition forms. The macroparser.monads
namespace contains a macro for an alternative monad syntax, though it
does not, presently, interoperate with algo.monads. (Such
interoperation is, however, trivially accomplished.)
Note that error messages at the moment are both deceptive (since parsatron currently has no facility for anything other than row & column-based character-oriented error messages), extremely verbose, and unhelpful. Until some kind of error-message-overriding combinator is developed for parsatron, it will be advisable to catch exceptions and provide your own, more informative, error messages to users of any macros (or anything else) you might parse with these combinators.
Copyright (C) 2012 Ben Wolfson
Distributed under the Eclipse Public License, the same as Clojure.