summaryrefslogtreecommitdiff
path: root/src/modules/parser/parser.scm
diff options
context:
space:
mode:
authorbd <bdunahu@operationnull.com>2025-01-04 22:43:31 -0700
committerbd <bdunahu@operationnull.com>2025-01-04 22:43:31 -0700
commit0d69984338399a78a3ba6f3a2493f1ffb34964f8 (patch)
treea0ed32f2d0fb5a9ea8d47a4239425a4c87b26e07 /src/modules/parser/parser.scm
parent28116b7a9e77df0476f5dc15369637d508c1bfcb (diff)
Modify parser to handle unary operators
Diffstat (limited to 'src/modules/parser/parser.scm')
-rw-r--r--src/modules/parser/parser.scm17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/modules/parser/parser.scm b/src/modules/parser/parser.scm
index ceac389..fa9202d 100644
--- a/src/modules/parser/parser.scm
+++ b/src/modules/parser/parser.scm
@@ -21,12 +21,17 @@
(define (p-stmt tokens)
(match tokens
- (`(return ,expr semi-colon)
- (make-stmt (p-expr (list expr))))
+ (('return expr ... 'semi-colon)
+ (make-stmt (p-expr expr)))
(_ (die))))
(define (p-expr tokens)
- (match tokens
- (((? number? int))
- (make-expr int))
- (_ (die))))
+ (make-expr
+ (match tokens
+ (((? integer? int))
+ (make-const int))
+ (((or 'sub 'complement) expr ...)
+ (make-unary (car tokens) (p-expr expr)))
+ (('left-paren expr ... 'right-paren)
+ (p-expr expr))
+ (_ (die)))))