Grammar Compiler [file gramcom.clj]
It is easy to write a grammar compiler that converts a Yacc-like grammar into the equivalent ATN parsing functions. This is especially easy in Lisp since Lisp code and Lisp data are the same thing.
; $$ $1 $2
(rulecompr '(loc -> (in (city))
(restrict 'city $2))
'locfn)
(defn locfn []
(saveptr)
(let [$1 (and (= atnword (quote in)) atnword)]
(if $1
(do (nextword)
(let [$2 (wordcat (quote city))]
(if $2
(do (nextword)
(success)
(restrict (quote city) $2))
(fail))))
(fail))))