首先是clojure下的神器instaparse。instaparse是那种如果让你做个parser,不限定语言,那你一定要尝试使用的工具。 别的工具一天能做出来的效果,instaparse一小时就能搞定。我们看个例子: ? 从上图里看到,使用instaparse,仅仅18行代码,我们就可以完成lexer/parser的定义。 instaparse的强大之处不仅仅在于简单的语法,还在于你可以使用REPL来调试你的代码!用REPL来调试你的代码!用REPL来调试你的代码! 当然,在我的读者里,目测clojure程序员相当稀有,所以,绝大多数人只能看着instaparse眼馋。 好吧,接下来我们讲讲jison。
Compojure 底层使用 clout 这个库实现,而 clout 本身是基于一个 parser generator(instaparse) 定义的“路由”领域特定语言。