在Clojure中创建词法分析器

问题描述

如果我想在函数中传递字符串并返回使用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"]]]