From c02164cfee4d8c3d3eca76fa8cc60b6ca60c2ca0 Mon Sep 17 00:00:00 2001 From: bd Date: Thu, 10 Apr 2025 23:29:36 -0400 Subject: Switch to allowing variables to be used as immediate fields --- src/parse.lisp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/parse.lisp b/src/parse.lisp index 687474b..73e98c5 100644 --- a/src/parse.lisp +++ b/src/parse.lisp @@ -50,15 +50,15 @@ (:function cadr) (:lambda (e) (list 'emit::rr e))) -(esrap:defrule var alpha - (:lambda (e) (list (list 'emit::rr 0) (list 'emit::var e)))) +(esrap:defrule variable alpha + (:lambda (e) (list 'emit::var e))) (esrap:defrule dereference (and int #\( register #\)) (:destructure (i1 w1 r w2) (declare (ignore w1 w2)) (list r (list 'emit::imm i1)))) -(esrap:defrule immediate int +(esrap:defrule immediate (or int variable) (:lambda (e) (list 'emit::imm e))) ;;; defines rules to parse labels @@ -114,12 +114,12 @@ DESTRUCTURE-PATTERN is the list of non-terminals on the right side of the gramma (defrule-instr i-type-3 'emit::i (1 0 2) register register immediate) (defrule-instr j-type-3 'emit::j (1 0) label) -(esrap:defrule i-type-1 (and i-type-1-m space register space (or dereference var)) +(esrap:defrule i-type-1 (and i-type-1-m space register space dereference) (:destructure (m w1 s w2 di) (declare (ignore w1 w2)) `(emit::i ,m ,s ,@di))) -(esrap:defrule i-type-2 (and i-type-2-m space register space (or dereference var)) +(esrap:defrule i-type-2 (and i-type-2-m space register space dereference) (:destructure (m w1 s w2 di) (declare (ignore w1 w2)) `(emit::i ,m ,@(util:insert-in-middle di s)))) -- cgit v1.2.3