Parsing 用Racket#lang plai编写解析器
我需要在racket中为这个抽象语法编写一个解析器:Parsing 用Racket#lang plai编写解析器,parsing,racket,Parsing,Racket,我需要在racket中为这个抽象语法编写一个解析器: ;; <DE> ::= <num> ;; | {distribution <num>*} ;; | {uniform <num> <num>} ;; | {+ <DE> <DE>} ;; | {- <DE> <DE>} ;; | {* <DE> <DE>} ;; |
;; <DE> ::= <num>
;; | {distribution <num>*}
;; | {uniform <num> <num>}
;; | {+ <DE> <DE>}
;; | {- <DE> <DE>}
;; | {* <DE> <DE>}
;; | {with {<id> <DE>} <DE>}
;; | <id>
(define-type Binding
[binding (name symbol?) (named-expr DE?)])
(define-type DE
[distribution (values (listof number?))]
[id (name symbol?)]
[binop (op procedure?) (lhs DE?) (rhs DE?)]
[with (b Binding?) (body DE?)])
注意,{uniform a b}是从a到b(包括a到b)的离散均匀分布。如果a>b,那么它是空的
这不是预期的工作,我不能得到它的权利。网络上没有帮助我的资源,或者至少我找不到
有人能解释我哪里错了,解决办法是什么吗?我真的不知道。谢谢 你给出的语法(与你围绕它写的散文相结合)让事情看起来有点模棱两可。因此,您可以用这种语言共享一些示例程序吗?
(define (parse sexp)
(match sexp
[(? symbol?) (id sexp)]
[sexp (distribution (values (list sexp)))]
[(list '+ l r) (binop + (parse l) (parse r))]
[(list '- l r) (binop - (parse l) (parse r))]
[(list '* l r) (binop * (parse l) (parse r))]))