所以我一直在搞乱 instaparse 并且它很棒,但是我一直试图避免使用正则表达式作为拐杖,它导致了一些更冗长。为了保持这种可读性,我们只说#'[A-z]'
实际上是'A'|'B'|etc
格式。
(def myprsr (instaparse.core/parser
"word = (ltr | num)+;
<ltr> = #'[A-z]';
<num> = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';"))
(myprs"foo123") ;; -> [:word "f" "o" "o" "1" "2" "3"]
有没有什么办法不使用或(#'[A-z]+'
如果我制定了一个数字顶级规则)来避免将它们作为后解析处理的一部分连接起来?#'[0-9]+
[:word "foo123"]
[:number "123"]