From 0fe2cc70abacc7c9e7aa2602836c8226bb1a1dc3 Mon Sep 17 00:00:00 2001 From: bd Date: Mon, 7 Apr 2025 23:58:29 -0400 Subject: Add label processing, mnemonic and label lookup maps --- src/parse.lisp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/parse.lisp (limited to 'src/parse.lisp') diff --git a/src/parse.lisp b/src/parse.lisp new file mode 100644 index 0000000..8bd8c50 --- /dev/null +++ b/src/parse.lisp @@ -0,0 +1,21 @@ +(in-package #:parse) + +(defun tokens->ast (program) + (let ((program (remove nil (mapcar #'extract-label program)))) + ;; TODO + program)) + +(let ((i 0)) + (defun extract-label (line) + "Given a series of tokens LINE, determines if LINE is +in the form STRING {colon}. If it is, then it is treated as a +label, and pushed onto the stack with the line index. + +Note that this function is intended to be called using mapcar, +so that labels can be added to a map and otherwise removed from +processing." + (trivia:match line + ((list (and id (type string)) + (satisfies (lambda (x) (equal x 'lex::colon)))) + (progn (push (cons (read-from-string id) i) util:label-loc) nil)) + (_ (progn (incf i) line))))) -- cgit v1.2.3