blob: ceac38932faa11d47bfa452927c7d9ff049a19b5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
(define-module (modules parser parser)
#:use-module (ice-9 match)
#:use-module (modules ast syntax-tree)
#:export (p-program))
(define (die)
(error "syntax error"))
(define (p-program tokens)
(match tokens
((func ...)
(make-program (p-function func)))
(_ (die))))
(define (p-function tokens)
(match tokens
(('int (? string? id) 'left-paren 'void 'right-paren 'open-brace stmt ... 'close-brace)
(make-function (make-id id) (p-stmt stmt)))
(_ (die))))
(define (p-stmt tokens)
(match tokens
(`(return ,expr semi-colon)
(make-stmt (p-expr (list expr))))
(_ (die))))
(define (p-expr tokens)
(match tokens
(((? number? int))
(make-expr int))
(_ (die))))
|