added bit shifts (<< >>), bitand (&), bitor (|), rot, over, swap ops

This commit is contained in:
2024-07-30 22:38:29 +03:00
parent 7562c4b30b
commit 7f6bb99e08
2 changed files with 63 additions and 5 deletions

View File

@@ -4,10 +4,17 @@
(defparameter *identifiers*
'(+ - dump = ise yoksa yap push değiş üst rot düş döngü iken < >
syscall-1 syscall-2 syscall-3 syscall-4 syscall-5 syscall-6
bel oku yaz))
bel oku yaz >> << & "|"))
(defun is-identifier (sym)
(find sym *identifiers* :test #'string=)))
(defun assembly-undefined-ops ()
(iter (for (k) in-hashtable *operations*)
(collect k into defops)
(finally (return (remove-if (lambda (sym) (search "SYSCALL" (string sym)))
(set-difference *identifiers* defops
:test #'string=))))))
(defun make-token (sym? line col)
(if (or (numberp sym?) (is-identifier sym?))
(values (list sym? :line line :col col) nil)
@@ -27,6 +34,9 @@
(cond ;; ((char= #\. next-char)
;; (collect (make-token '|.| line-num col) into tokens)
;; (read-char line-stream))
((char= #\| next-char)
(read-char line-stream)
(collect (make-token "|" line-num col) into tokens))
((char= #\Space next-char) (read-char line-stream))
((char= #\; next-char) ;; and not in string
(finish))
@@ -246,8 +256,4 @@
(defun compile-program (path)
(generate-program (make-program path) :compile t))
(defun assembly-undefined-ops ()
(iter (for (k) in-hashtable *operations*)
(collect k into defops)
(finally (return (set-difference *identifiers* defops)))))