首页 > 解决方案 > 在 Clojure 中创建词法分析器

问题描述

如果我想在函数中传递一个字符串并返回使用 Clojure 键入的字符串的令牌类型,例如“int x=5;” 将是“:alpha :alpha :alpha :whitespace :equal :digit”。我将如何在 Clojure 中编写词法分析器函数?

标签: clojuretokentokenizeclojurescriptlexer

解决方案


您应该使用instaparse 库。一个例子:

(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"]]]

推荐阅读