From 4367febcd70e9bb7538cd168917ec3c7d3b0a6f3 Mon Sep 17 00:00:00 2001 From: mRnea Date: Mon, 19 Aug 2024 21:37:24 +0300 Subject: add target option to command line, fix | when its last char on line --- cl-forth.lisp | 12 ++++++------ main.lisp | 23 ++++++++++++++++++----- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/cl-forth.lisp b/cl-forth.lisp index faa48a6..ec2a0f3 100644 --- a/cl-forth.lisp +++ b/cl-forth.lisp @@ -46,12 +46,12 @@ (let ((flag t)) (cond ((char= #\| next-char) (read-char line-stream) - (if (char-equal #\Space - (peek-char nil line-stream nil nil)) - (collect (make-token :pipe line-num col :identifier) - into tokens) - (progn (unread-char #\| line-stream) - (setf flag nil)))) + (let ((peeked (peek-char nil line-stream nil nil))) + (if (or (not peeked) (char-equal #\Space peeked)) + (collect (make-token :pipe line-num col :identifier) + into tokens) + (progn (unread-char #\| line-stream) + (setf flag nil))))) ((char= #\Space next-char) (read-char line-stream)) ((char= #\; next-char) ;; and not in string (finish)) diff --git a/main.lisp b/main.lisp index 6b0d08c..8e9e719 100644 --- a/main.lisp +++ b/main.lisp @@ -61,7 +61,13 @@ :filepath :description "Kaynak dosyasını belirt." :short-name #\k - :key :kaynak))) + :key :kaynak) + (clingon:make-option + :string + :initial-value "nasm" + :description "Derleme hedefini belirt." + :short-name #\h + :key :hedef))) (defun subcommands () (list (clingon:make-command @@ -69,10 +75,17 @@ :description "Dosyadaki programı derle" :usage "" :options (comp-options) - :handler (lambda (cmd) (generate-program - (make-program - (clingon:getopt cmd :kaynak)) - :compile t))) + :handler + (lambda (cmd) (let ((hedef (clingon:getopt cmd :hedef))) + (generate-program + (make-program + (clingon:getopt cmd :kaynak)) + :path + (format nil "output.~a" + (cond ((string-equal "nasm" hedef) "asm") + ((string-equal "c" hedef) "c"))) + :compile t + :target (intern (string-upcase hedef) :keyword))))) (clingon:make-command :name "test" :description "Testleri çalıştır." -- cgit v1.2.3