From 42ae34d6f2ee0f0eb10e6ecc1e914c5d4753a184 Mon Sep 17 00:00:00 2001 From: bd Date: Thu, 10 Apr 2025 21:56:36 -0400 Subject: Allow all integers to be negative --- src/parse.lisp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src/parse.lisp') diff --git a/src/parse.lisp b/src/parse.lisp index 6b0d31d..687474b 100644 --- a/src/parse.lisp +++ b/src/parse.lisp @@ -18,6 +18,8 @@ (incf line-number) nil)) +(esrap:defrule sign (or #\+ #\-)) + (esrap:defrule alpha (+ (alphanumericp character)) (:text t)) @@ -38,7 +40,9 @@ "A" "B" "C" "D" "E" "F"))) (:lambda (e) (parse-integer (esrap:text (cddr e)) :radix 16))) -(esrap:defrule int (or binary octal hex decimal)) +(esrap:defrule int (and (esrap:? sign) (or binary octal hex decimal)) + (:destructure (s i) + (if (and s (string= s "-")) (- i) i))) ;;; defines rules to parse an operand @@ -49,10 +53,10 @@ (esrap:defrule var alpha (:lambda (e) (list (list 'emit::rr 0) (list 'emit::var e)))) -(esrap:defrule dereference (and (esrap:? (or #\+ #\-)) int #\( register #\)) - (:destructure (s i1 w1 r w2) +(esrap:defrule dereference (and int #\( register #\)) + (:destructure (i1 w1 r w2) (declare (ignore w1 w2)) - (list r (list 'emit::imm (if (and s (string= s "-")) (- i1) i1))))) + (list r (list 'emit::imm i1)))) (esrap:defrule immediate int (:lambda (e) (list 'emit::imm e))) -- cgit v1.2.3