Skip to content

l4e21/Combray

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Combray

Yet Another Parser Combinator Library with a modern DSL for writing custom parsers.


Primitive Parsers

pchar parses a character
pnumber parses a number
pinteger parses an integer
pbool parses a bool
puppercase parses an uppercase letter
plowercase parses a lowercase letter
pletter parses any letter
pword parses a string of letters
pcommasep parses comma-separated values (like in json)
pexactly parses the provided string exactly (and then coerces to string)

Parser Combinators

pconcat Parses and then concatenates the result into a list
pchoice Returns the first parser that passes, otherwise fails
p* Parses zero or more
p+ Parses one or more
pnoresult Parses and then returns nil in the result
pbetween Takes 3 parsers, and returns the result of the second
poptional parses but does not fail if there is a failure
pfollowedby parses, ensuring the second parser passes but only returning the first result
pprecededby parses, ensuring the first parser passes but only returning the second result
palways parses anything except EOF
pnot returns state unless the parser passes, which results in a fail
pexcept parses a character unless the given parser passes
puntil parses into a list (using palways) until the given parser passes
preturn returns t-state with a given bit of data

Writing Parsers

prepare-string-for-parsing turns a string into a state that is ready for parsing

with-state anaphoric macro that provides a closure with a state variable for easy error railroading

defparser defines a function that puts your body into a with-state

plet* A macro that works like let* but each body of the binding is a parser-fn that is applied to the state subsequently, the body is what will be contained in the result (should all the parsers pass)

Testing

(asdf:test-system :combray)

TODO

  • Add debugging middleware (add history and tags to state?)
  • Add more primitives
  • Add more combinators
  • Provide more examples/docs

About

Yet Another Parser Combinator Library

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published