summaryrefslogtreecommitdiff
path: root/src/modules/parser
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/parser')
-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)))))