summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-01-18 11:40:25 -0700
committerbd <bdunahu@operationnull.com>2025-01-18 11:40:25 -0700
commitb1e901b5ea18eb5b1fc985ae2d44737858afc3e2 (patch)
tree105d2817f5ba2f1b72e6741a196591d6fc00d266
parent14b2600bd58b0a4b09c6647c1d78ab7bccd4c1aa (diff)
Complete full translation for unary operators
-rw-r--r--README.org4
-rw-r--r--src/modules/parser/driver.scm2
-rw-r--r--src/modules/tacky/traverse.scm7
3 files changed, 7 insertions, 6 deletions
diff --git a/README.org b/README.org
index 33c5ac4..16f12c1 100644
--- a/README.org
+++ b/README.org
@@ -12,10 +12,10 @@ It is written from scratch solely using tools distributed with Guile.
- [X] Cleanup temp files after process end
- [ ] More parenthesis
-** TODO Features [1/19]
+** TODO Features [2/19]
- [X] Trivial Programs
-- [ ] Unary Operators
+- [X] Unary Operators
- bitwise complement, negation
- [ ] Binary Operators
- [ ] Logical and Relational Operators
diff --git a/src/modules/parser/driver.scm b/src/modules/parser/driver.scm
index f5e503e..e464a7a 100644
--- a/src/modules/parser/driver.scm
+++ b/src/modules/parser/driver.scm
@@ -27,7 +27,7 @@
(define (expression tokens)
(match tokens
(((? integer? int))
- int)
+ (list 'const int))
(((or 'neg 'not) expr ...)
(list 'expr (car tokens) (expression expr)))
(('left-paren expr ... 'right-paren)
diff --git a/src/modules/tacky/traverse.scm b/src/modules/tacky/traverse.scm
index 5f1ad1f..2fd4ca7 100644
--- a/src/modules/tacky/traverse.scm
+++ b/src/modules/tacky/traverse.scm
@@ -19,9 +19,10 @@
(list (list 'ret (car val)))))))
(define (expr op val)
- (cond
- ((integer? val) (make-instruction op (imm val) '()))
- (#t (make-instruction op (car val) (cdr val)))))
+ (make-instruction op (car val) (cdr val)))
+
+(define (const val)
+ (cons (imm val) '()))
(define (make-instruction op src instrs)
(let ((dst (make-temporary)))