问题描述
如果我想在函数中传递字符串并返回使用Clojure输入的字符串的令牌类型,例如“ int x = 5;”。将为“:alpha:alpha:alpha:whitespace:equal:digit”。如何在Clojure中编写lexer函数?
解决方法
您应该使用the instaparse library。一个例子:
(def as-and-bs
(insta/parser
"S = AB*
AB = A B
A = 'a'+
B = 'b'+"))
=> (as-and-bs "aaaaabbbaaaabb")
[:S
[:AB [:A "a" "a" "a" "a" "a"] [:B "b" "b" "b"]]
[:AB [:A "a" "a" "a" "a"] [:B "b" "b"]]]