diff options
author | bd <bdunahu@operationnull.com> | 2025-01-04 22:43:31 -0700 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-01-04 22:43:31 -0700 |
commit | 0d69984338399a78a3ba6f3a2493f1ffb34964f8 (patch) | |
tree | a0ed32f2d0fb5a9ea8d47a4239425a4c87b26e07 /src/modules/parser/parser.scm | |
parent | 28116b7a9e77df0476f5dc15369637d508c1bfcb (diff) |
Modify parser to handle unary operators
Diffstat (limited to 'src/modules/parser/parser.scm')
-rw-r--r-- | src/modules/parser/parser.scm | 17 |
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))))) |