(in-package :cl-forth) (defun main () (let ((args (rest sb-ext:*posix-argv*))) (let ((flag (first args))) (cond ((string= flag "-c") ;; (iter (for (k v) in-hashtable *operations*) ;; (for i from 0) ;; (format t "~s: ~s~%" i k)) ;; (let ((tokens (lex-file (second args)))) ;; (format t "~s~%" tokens) ;; (let ((program (prog-from-tokens tokens))) ;; (format t "~s~%" program) ;; (generate-program program :compile t))) (compile-program (second args))) ((string= flag "-i") (format t "Interpret program WIP~%")) (t (format t "~a is not a valid flag~%" flag)))))) ;; (defun make-exe () ;; (sb-ext:save-lisp-and-die #P"cl-forth" ;; :toplevel #'main ;; :executable t)) (defparameter *example-path* "./test/prog.lorth") (defun example-lex () (lex-file *example-path* t)) (defun example-prog () (make-program *example-path*)) (defun example-compile () (generate-program (make-program *example-path*) :path "test/output.asm" :compile t)) (defun example-run () (example-compile) (run '("test/output")))