 (defmacro int<-digits [base & digits]
   (reduce #(do `(+ (* ~% ~base) ~%2)) digits))
 
-(defn oct-digit [c]
+(defn octal-digit [c]
   (when-let [n (and c (int c))]
     (when (<= (int \0) n (int \7)) (- n (int \0)))))
 
-(def &oct-digit (&let [c &read-char] (or (oct-digit c) (fail))))
+(def &octal-digit (&let [c &read-char] (or (octal-digit c) (fail))))
 
 (def &octal-char
-  (&let [o0 &oct-digit o1 &oct-digit o2 &oct-digit]
+  (&let [o0 &octal-digit o1 &octal-digit o2 &octal-digit]
      (char (int<-digits 8 o0 o1 o2))))
 
-(defn dec-digit [c]
+(defn decimal-digit [c]
   (when-let [n (and c (int c))]
     (when (<= (int \0) n (int \9)) (- n (int \0)))))
 
-(def &dec-digit (&let [c &read-char] (or (dec-digit c) (fail))))
-
-(defn hex-digit [c]
+(def &decimal-digit (&let [c &read-char] (or (decimal-digit c) (fail))))
+
+(defn hexadecimal-digit [c]
   (when-let [n (and c (int c))]
     (cond (<= (int \0) n (int \9)) (- n (int \0))
           (<= (int \a) n (int \f)) (+ n (- 10 (int \a)))
           (<= (int \A) n (int \F)) (+ n (- 10 (int \A))))))
 
-(def &hex-digit (&let [c &read-char] (or (hex-digit c) (fail))))
+(def &hexadecimal-digit (&let [c &read-char] (or (hexadecimal-digit c) (fail))))
 
 (def &latin1-char
-  (&let [x0 &hex-digit x1 &hex-digit]
+  (&let [x0 &hexadecimal-digit x1 &hexadecimal-digit]
      (char (int<-digits 16 x0 x1))))
 
 (def &unicode-char-16
-  (&let [x0 &hex-digit x1 &hex-digit x2 &hex-digit x3 &hex-digit]
+  (&let [x0 &hexadecimal-digit x1 &hexadecimal-digit x2 &hexadecimal-digit x3 &hexadecimal-digit]
      (char (int<-digits 16 x0 x1 x2 x3))))
 
 (def &unicode-char-32
-  (&let [x0 &hex-digit x1 &hex-digit x2 &hex-digit x3 &hex-digit
-         x4 &hex-digit x5 &hex-digit x6 &hex-digit x7 &hex-digit]
+  (&let [x0 &hexadecimal-digit x1 &hexadecimal-digit x2 &hexadecimal-digit x3 &hexadecimal-digit
+         x4 &hexadecimal-digit x5 &hexadecimal-digit x6 &hexadecimal-digit x7 &hexadecimal-digit]
      (char (int<-digits 16 x0 x1 x2 x3 x4 x5 x6 x7))))
 
 (defn &escape-seq [ub r]

(def uppercase (into #{} (char-range \A \Z)))
(def lowercase (into #{} (char-range \a \z)))
(def digits (into #{} (char-range \0 \9)))
(def letters_ (clojure.set/union uppercase lowercase #{\_}))
(def letters_digits (clojure.set/union letters_ digits))

(def keywords
  (let [l '(and as assert break class continue

(defn char-lower-case [c]
  (when c (char (java.lang.Character/toLowerCase (int c)))))

(def char-name-chars (set/union uppercase #{\space}))

(def &named-char
  (&let
