further fixes, probably need to change representation of tokens
This commit is contained in:
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user