From b1e901b5ea18eb5b1fc985ae2d44737858afc3e2 Mon Sep 17 00:00:00 2001 From: bd Date: Sat, 18 Jan 2025 11:40:25 -0700 Subject: Complete full translation for unary operators --- README.org | 4 ++-- src/modules/parser/driver.scm | 2 +- src/modules/tacky/traverse.scm | 7 ++++--- 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))) -- cgit v1.2.3