diff options
Diffstat (limited to 'src/modules/parser')
-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))))) |