diff options
author | aleksei <aleksei@aj.org> | 2024-04-12 12:06:27 +1000 |
---|---|---|
committer | aleksei <aleksei@aj.org> | 2024-04-12 12:06:27 +1000 |
commit | 82632e220e3a0c2f72c463f8c07b9678d7399972 (patch) | |
tree | 62af2169e228d6980ffcef3898302e6d6f9e9e59 /main.lisp | |
parent | 095cacc7a00eb42fc0a5c5dc9754480dfc56c6a2 (diff) |
Shifted main.lisp contents
Diffstat (limited to 'main.lisp')
-rw-r--r-- | main.lisp | 93 |
1 files changed, 0 insertions, 93 deletions
@@ -19,99 +19,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA |# -(defun interpret-character (s x) - "Interpret meanings of characters." - (cond - ((>= x (length s)) - 'end-of-line) - (t - ;; Have character, interpret - (let ((c (char s x))) - (cond - ((eq c #\;) ; Comment - 'comment) - ((eq c #\ ) ; Space - 'whitespace) - (t - 'normal)))))) - -(defun extract-word (line-string index) - "Extract a single word from line-string, starting at index." - (cond - ((member (interpret-character line-string index) - `(end-of-line comment)) - 'end-of-line) - ((equal (interpret-character line-string index) - 'whitespace) - 'whitespace) - (t - (subseq - line-string - index - (do ((end index (incf end))) - ((not (equal 'normal - (interpret-character line-string end))) - end)))))) - -(defun extract-words (line-string &optional (index 0)) - "Return a list the constituent word strings of line-string." - ;; Word Processing Logic - (let ((word (extract-word line-string index))) - (cond - ;; Terminate execution at end-of-line. - ((equal word 'end-of-line) - nil) - ;; If empty, continue on. - ((equal word 'whitespace) - (extract-words line-string (+ index 1))) - ;; Otherwise, extract word and move ahead. - (t - (cons word - (extract-words line-string - (+ index - (length word)))))))) - - -;; Working read-program -(defun read-program (source-filename) - (let ((line (read-line source-filename nil 'EOF))) - (if (equal line 'EOF) - nil - (let ((line-list (extract-words line))) - (if (equal line-list nil) - (progn - (incf *source-line-number*) - (read-program)) - (cons - (list (incf *source-line-number*) - (extract-words line)) - (read-program))))))) - - - -;; Self contained version -(defun program (source-filename) - "Turns an assembly source file into a list, prepended with line numbers." - (let ((source-file (open source-filename)) - (source-line-number 0)) - (labels - ((recurse () - (let ((line (read-line source-file nil 'EOF))) - (if (equal line 'EOF) - nil - (let ((line-list (extract-words line))) - (if (equal line-list nil) - (progn - (incf source-line-number) - (recurse)) - (cons - (list (incf source-line-number) - (extract-words line)) - (recurse)))))))) - (recurse)))) - - - (defun last-char (s) (char s (- (length s) 1))) |