further fixes, probably need to change representation of tokens

This commit is contained in:
2024-07-29 23:56:06 +03:00
parent 004c2b5628
commit 4091b0e81f

View File

@@ -48,7 +48,7 @@
(defun lex-file (file-name &optional report-errors)
(let ((has-error nil))
(values
(with-open-file (str file-name)
(with-open-file (str file-name :external-format :utf-8)
(iter outer
(for line = (read-line str nil nil))
(until (null line))
@@ -99,30 +99,30 @@
(let ((op (token-op token)))
(cond ((numberp op)
(vector-push-extend `(push ,op) ops))
((eq 'ise op)
((string= 'ise op)
(push (list 'ise i) stack)
(vector-push-extend (list 'ise nil) ops))
((eq 'yoksa op)
((string= 'yoksa op)
(let ((top (pop stack)))
(assert (eq 'ise (car top)))
(assert (string= 'ise (car top)))
(setf (second (aref ops (cadr top))) i)
(push (list 'yoksa i) stack)
(vector-push-extend (list 'yoksa nil i) ops)))
((eq 'yap op)
((string= 'yap op)
(let ((top (pop stack)))
(cond ((find (car top) (list 'yoksa 'ise))
(setf (second (aref ops (cadr top))) i)
(vector-push-extend (list 'yap i) ops))
((eq 'iken (car top))
((string= 'iken (car top))
(setf (second (aref ops (cadr top))) i)
(vector-push-extend (list 'yap i (third top)) ops))
(t (error "yap cannot reference: ~a" (car top))))))
((eq 'döngü op)
((string= 'döngü op)
(push (list 'döngü i) stack)
(vector-push-extend (list 'döngü i) ops))
((eq 'iken op)
((string= 'iken op)
(let ((top (pop stack)))
(assert (eq 'döngü (car top)))
(assert (string= 'döngü (car top)))
(push (list 'iken i (cadr top)) stack)
(vector-push-extend (list 'iken nil) ops)))
((search "syscall" (string-downcase (string op)))
@@ -219,7 +219,7 @@
;;; COMPILER
(defun write-program (program out &key mem-cap)
(defun write-program (program out &key (mem-cap 640000))
(format out "~a~%" "segment .text")
(gen-dump out)
(format out "~{~a~%~}" '("global _start"