diff options
author | bd <bdunahu@operationnull.com> | 2025-01-18 11:40:25 -0700 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-01-18 11:40:25 -0700 |
commit | b1e901b5ea18eb5b1fc985ae2d44737858afc3e2 (patch) | |
tree | 105d2817f5ba2f1b72e6741a196591d6fc00d266 | |
parent | 14b2600bd58b0a4b09c6647c1d78ab7bccd4c1aa (diff) |
Complete full translation for unary operators
-rw-r--r-- | README.org | 4 | ||||
-rw-r--r-- | src/modules/parser/driver.scm | 2 | ||||
-rw-r--r-- | src/modules/tacky/traverse.scm | 7 |
3 files changed, 7 insertions, 6 deletions
@@ -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))) |