Skip to content

Instantly share code, notes, and snippets.

@devth
Created August 22, 2013 16:58
Show Gist options
  • Save devth/6309943 to your computer and use it in GitHub Desktop.
Save devth/6309943 to your computer and use it in GitHub Desktop.
(def bal
(insta/parser
"expr = group
<cmd> = word (space word)*
sub-expr = <dollar> <lparen> group <rparen>
<group> = lparen cmd rparen | cmd
<word> = sub-expr | group | #'[^ ()]*'
space = <' '>+
<dollar> = '$'
<lparen> = '('
<rparen> = ')'
"))
(bal "(foo (bar))")
(bal "foo bar (bar)")
(bal "foo bar $(baz bar)")
(bal "foo bar (qux) $(clj (map (partial * 2) (range 10)))")
[:expr "foo" [:space] "bar" [:space] "(" "qux" ")" [:space] [:sub-expr "clj" [:space] "(" "map" [:space] "(" "partial" [:space] "*" [:space] "2" ")" [:space] "(" "range" [:space] "10" ")" ")"]]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment