; Teil der BNF für Scheme-Programme ; ::=
* ; ::= ; | ; ::= (define ) ; ::= ; | ; | ; | ; | ; ::= (if ) ; ::= (lambda ) ; ::= (*) ; ::= ; ::= ( *) ; ::= ; ::= (define-struct (forms)) ; forms : list() (define-struct (def/exp)) ; def/exp : + (define-struct (l define variable expression r)) ; l, r : string ; define : symbol ; variable : ; expression : (define-struct (lit/var/cond/lam/proc)) ; lit/var/cond/lam/proc : + + + + (define-struct (value)) ; value : scheme-value (define-struct (name)) ; name : symbol (define-struct (l if cond then else r)) ; l, r : string ; if : symbol ; cond, then, else : (define-struct (l lambda formals body r)) ; l, r : string ; lambda : symbol ; formals : ; body : (define-struct (l variables r)) ; l, r : string ; variables : list() (define-struct (exp)) ; exp : (define-struct (l operator operands r)) ; l, r : string ; operator : ; operands : list() (define-struct (exp)) ; exp: (define-struct (exp)) ; exp: expression (define l "(") (define r ")") ; ===> (lambda (x) (+ x 1)) (define t1 (make- (make- l 'lambda (make- l (list (make- 'x)) r) (make- (make- (make- l (make- (make- (make- '+))) (list (make- (make- (make- 'x))) (make- (make- (make- 1)))) r))) r))) ; ===> (if #t 1 2) (define t2 (make- (make- l 'if (make- (make- #t)) (make- (make- 1)) (make- (make- 2)) r)))