From 10b5ba35c96f72e5b66698b36c7e0a38b555f394 Mon Sep 17 00:00:00 2001 From: Darren Bane Date: Fri, 4 Dec 2020 21:02:35 +0000 Subject: Start porting 'lexer' --- clex.lisp | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/clex.lisp b/clex.lisp index 550ead4..7ca04f0 100644 --- a/clex.lisp +++ b/clex.lisp @@ -6,7 +6,8 @@ #: #: #: - #:ident)) + #:ident + #:lexer)) (in-package #:clex) (defclass () () (:metaclass )) @@ -60,5 +61,23 @@ (defgeneric lexer (cl)) (defmethod lexer ((cl )) + (flet ((lexer-char (c) + (cond ((member c '(#\space #\tab)) + (forward cl) + (lexer cl)) ; NB: tail recursion. ok? + ((or (and (char>= c #\a) (char<= c #\z)) + (and (char>= c #\A) (char<= c #\Z))) + (make-instance (find-class ') 'i (extract-ident cl))) + ((char= c #\") + (forward cl) + (let ((res (make-instance (find-class ') 's (extract (lambda (c) (char/= c #\")) cl)))) + (forward cl) + res)) + ((member c '(#\+ #\- #\* #\/ #\% #\& #\| #\! #\= #\( #\))) + (forward cl) + (make-instance (find-class ') 's (string c))) + ((member c '(#\< #\>)) + (forward cl) + ) (provide "clex") -- cgit 1.4.1-2-gfad0