diff options
author | Darren Bane <darren.bane@gmail.com> | 2020-10-14 00:00:23 +0100 |
---|---|---|
committer | Darren Bane <darren.bane@gmail.com> | 2020-10-14 00:00:23 +0100 |
commit | 851f5d17ba7f22a54779b04e34bbde2917a2c10d (patch) | |
tree | 80e38060cf7b53e1d5314ee25585237a58d09694 | |
parent | 84d897e941a679529d4f00ea5952196c40656b5f (diff) | |
download | lsp-851f5d17ba7f22a54779b04e34bbde2917a2c10d.tar.gz |
Should have used flet in the lexer
-rw-r--r-- | clex.lisp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/clex.lisp b/clex.lisp index 442f1cd..cdd6025 100644 --- a/clex.lisp +++ b/clex.lisp @@ -32,27 +32,27 @@ (defmethod extract (pred (cl <string-lexer>)) (let* ((st (lstring cl)) (pos (current cl)) - (ext (lambda (n) - (if (and (< n (size cl)) (pred (elt st n))) - (ext (+ n 1)) - n))) - (res (ext pos))) - (setf (current cl) res) - (subseq (lstring cl) pos (- res pos)))) + (res nil)) + (labels ((ext (n) + (if (and (< n (size cl)) (funcall pred (elt st n))) + (ext (+ n 1)) + n))) + (setq res (ext pos)) + (setf (current cl) res) + (subseq (lstring cl) pos (- res pos))))) (defgeneric extract-int (cl)) (defmethod extract-int ((cl <string-lexer>)) - ;; TODO: flet? - (let ((is-int (lambda (x) - (and (char>= x #\0) (char<= x #\9))))) - (convert (extract is-int cl) <number>))) + (flet ((is-int (x) + (and (char>= x #\0) (char<= x #\9)))) + (parse-integer (extract #'is-int cl)))) (defgeneric extract-ident (cl)) (defmethod extract-ident ((cl <string-lexer>)) - (let ((is-alpha-num (lambda (x) - (or (and (char>= x #\a) (char<= x #\z)) - (and (char>= x #\A) (char<= x #\Z)) - (and (char>= x #\0) (char<= x #\9)) - (char= x #\_))))) - (extract is-alpha-num))) + (flet ((is-alpha-num (x) + (or (and (char>= x #\a) (char<= x #\z)) + (and (char>= x #\A) (char<= x #\Z)) + (and (char>= x #\0) (char<= x #\9)) + (char= x #\_)))) + (extract #'is-alpha-num cl))) (provide "clex") |