summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/parse.lisp10
-rw-r--r--t/parse.lisp22
2 files changed, 16 insertions, 16 deletions
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))))
diff --git a/t/parse.lisp b/t/parse.lisp
index f82c98c..bd5ee97 100644
--- a/t/parse.lisp
+++ b/t/parse.lisp
@@ -62,10 +62,10 @@
'(emit::p
(emit::d)
(emit::x
- (emit::i "LOADV" (emit::rr 8) (emit::rr 0) (emit::var "vector"))
- (emit::i "STORE" (emit::rr 0) (emit::rr 5) (emit::var "int"))))
- (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 vector
-~tSTORE $5 int~%")))))
+ (emit::i "LOADV" (emit::rr 8) (emit::rr 4) (emit::imm 2))
+ (emit::i "STORE" (emit::rr 1) (emit::rr 5) (emit::imm 2))))
+ (esrap:parse 'parse:str->ast (format nil ".DATA~%.TEXT~%~tLOADV $8 2($4)
+~tSTORE $5 2($1)~%")))))
(test esrap-instr-type-all-lazy-spaces
(is (equal
@@ -86,7 +86,7 @@ JRL FOO~t~%PUSH $5~%")))))
(emit::x))
(esrap:parse 'parse:str->ast (format nil ".DATA~%~tA 1~%.TEXT~%")))))
-(test esrap-data-loaded
+(test esrap-data-loadedp
(is (equal
'(emit::p
(emit::d
@@ -128,9 +128,9 @@ H 3 5~%.TEXT~%")))))
(emit::d
1 2 3 4 3 0)
(emit::x
- (emit::i "LOAD" (emit::rr 5) (emit::rr 0) (emit::var "S"))
- (emit::i "LOAD" (emit::rr 10) (emit::rr 0) (emit::var "ARR"))
- (emit::i "LOAD" (emit::rr 6) (emit::rr 0) (emit::var "I"))
+ (emit::i "ADDI" (emit::rr 0) (emit::rr 5) (emit::imm (emit::var "S")))
+ (emit::i "ADDI" (emit::rr 0) (emit::rr 10) (emit::imm (emit::var "ARR")))
+ (emit::i "ADDI" (emit::rr 0) (emit::rr 6) (emit::imm (emit::var "I")))
(emit::j "JRL" (emit::rr 0) (emit::l "CMP" 20))
(emit::r "ADD" (emit::rr 10) (emit::rr 6) (emit::rr 9))
(emit::i "ADDI" (emit::rr 6) (emit::rr 6) (emit::imm 1))
@@ -143,9 +143,9 @@ H 3 5~%.TEXT~%")))))
I 0
.TEXT
- LOAD $5 S
- LOAD $10 ARR
- LOAD $6 I
+ ADDI $5 $0 S
+ ADDI $10 $0 ARR
+ ADDI $6 $0 I
JRL CMP
L:
ADD $9 $10 $6