forked from mkmik/clarsec
-
Notifications
You must be signed in to change notification settings - Fork 1
Parsec monadic parser ported to clojure
devn/clarsec
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
# clarsec clarsec is an attempt to port haskell parsec to clojure This library is inspired on http://kotka.de/projects/clojure/parser.html and uses the Meikel Brandmeyer's "monad" library (slightly adapted), as I didn't understand how the clojure contrib monad library works. ## Usage there is an example parser which I ported straight from a Haskell Parsec code. Basically, you should be able to write the examples on http://kotka.de/projects/clojure/parser.html. The library comes with a small number of basic combinators. I hope it will be useful. ## Caveats forward references are a mess. I tried to maintain the DSL as simple as possible. Imagine that "structureDef" and "comma" are two already existing parsers, and "brackets" and "sepBy" are two combinators. I want to be able to write it like this: (def structure (brackets (sepBy structureDef comma))) however, clojures 'def' binding is strict and all the referenced vars have to be already defined, otherwise you get: Var example/structureDef is unbound. I'm a clojure newbie, so I don't know exactly how to avoid this. I know only of two workarounds: 1. use functions: (defn structure [] (brackets (sepBy (structureDef) (comma)))) 2. use delay: (def structure (delay (brackets (sepBy structureDef comma)))) I opted for the "delay", as it allowed me to avoid all those spurious parens, and retain the illusion of a parser DSL, and put the "delay" only where needed. (or everywhere with a "defblabla" macro). Unfortunately this required a small patch to Brandmeyer's monad library. ## Installation leim jar ## License http://www.apache.org/licenses/LICENSE-2.0.html
About
Parsec monadic parser ported to clojure
Resources
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
- Clojure 100.0%