diff --git a/wip-duuqnd/user-side-compiler/tokenizer.lisp b/wip-duuqnd/user-side-compiler/tokenizer.lisp index 563727d..3bce133 100644 --- a/wip-duuqnd/user-side-compiler/tokenizer.lisp +++ b/wip-duuqnd/user-side-compiler/tokenizer.lisp @@ -33,13 +33,29 @@ reading immediately. Should be a subset of *SPECIAL-TOKEN-CHARS*.") ;; Special syntax tokens -(defclass token-end-of-statement (token) ()) -(defclass token-comma (token) ()) -(defclass token-plus (token) ()) -(defclass token-open-paren (token) ()) -(defclass token-close-paren (token) ()) -(defclass token-less-than (token) ()) -(defclass token-greater-than (token) ()) +(defmacro define-atomic-token (name) + `(defclass ,name (token) ())) + +(define-atomic-token token-end-of-statement) + +(define-atomic-token token-open-paren) +(define-atomic-token token-close-paren) +(define-atomic-token token-comma) + +(define-atomic-token token-plus) +(define-atomic-token token-minus) +(define-atomic-token token-star) +(define-atomic-token token-slash) + +(define-atomic-token token-less-than) +(define-atomic-token token-greater-than) +(define-atomic-token token-equal-equal) +(define-atomic-token token-not-equal) + +(define-atomic-token token-not) +(define-atomic-token token-negate) + +(define-atomic-token token-equal) ;;; String->class-name mappings for operator tokens @@ -48,10 +64,16 @@ reading immediately. Should be a subset of *SPECIAL-TOKEN-CHARS*.") (";" token-end-of-statement) ("," token-comma) ("+" token-plus) + ("-" token-minus) + ("*" token-star) + ("/" token-slash) ("(" token-open-paren) (")" token-close-paren) ("<" token-less-than) - (">" token-greater-than))) + (">" token-greater-than) + ("=" token-equal) + ("==" token-equal-equal) + ("!=" token-not-equal))) ;;; Keyword tokens