98 lines
3.5 KiB
Racket
98 lines
3.5 KiB
Racket
#reader scribble/reader
|
|
#lang scheme/base
|
|
(require scribblings/htdp-langs/common
|
|
scribble/decode
|
|
(for-label deinprogramm/DMdA-beginner))
|
|
|
|
(provide prim-nonterms
|
|
racketgrammar*-DMdA)
|
|
|
|
(define ex-str "Dies ist eine Zeichenkette, die \" enthält.")
|
|
|
|
(define-syntax-rule (racketgrammar*-DMdA
|
|
#:literals (lit ...)
|
|
(def-rule ...)
|
|
(prod ...)
|
|
(expr-rule ...))
|
|
(racketgrammar*
|
|
#:literals (define define-record-procedures lambda cond if and or let letrec let* begin
|
|
#;require lib planet
|
|
check-expect check-within check-error
|
|
signature :
|
|
predicate one-of mixed list %a %b %c
|
|
lit ...)
|
|
(... [program (code:line def-or-expr ...)])
|
|
[def-or-expr definition
|
|
expr
|
|
test-case
|
|
#;library-require]
|
|
[definition @#,racket[(define id expr)]
|
|
@#,racket[(define-record-procedures id id id (id (... ...)))]
|
|
@#,racket[(define-record-procedures-parametric (id id (... ...)) id id (id (... ...)))]
|
|
@#,racket[(: id sig)]
|
|
def-rule ...]
|
|
prod ...
|
|
[expr @#,racket[(code:line (expr expr (... ...)) (code:comment @#,seclink["application"]{Prozedurapplikation}))]
|
|
@#,racket[#t]
|
|
@#,racket[#f]
|
|
@#,racket[number]
|
|
@#,racket[string]
|
|
@#,racket[(lambda (id (... ...)) expr)]
|
|
@#,racket[(code:line id (code:comment @#,seclink["id"]{Bezeichner}))]
|
|
@#,racket[(cond (expr expr) (expr expr) (... ...))]
|
|
@#,racket[(cond (expr expr) (... ...) (else expr))]
|
|
@#,racket[(if expr expr)]
|
|
@#,racket[(and expr (... ...))]
|
|
@#,racket[(or expr (... ...))]
|
|
@#,racket[(let ((id expr) (... ...)) expr)]
|
|
@#,racket[(letrec ((id expr) (... ...)) expr)]
|
|
@#,racket[(let* ((id expr) (... ...)) expr) ]
|
|
@#,racket[(begin expr expr (... ...))]
|
|
@#,racket[(signature sig)]
|
|
@#,racket[(for-all ((id sig) (... ...)) expr)]
|
|
@#,racket[(==> expr expr)]
|
|
expr-rule ...]
|
|
[sig id
|
|
@#,racket[(predicate expr)]
|
|
@#,racket[(one-of expr (... ...))]
|
|
@#,racket[(mixed sig (... ...))]
|
|
@#,racket[(code:line (sig (... ...) -> sig) (code:comment @#,seclink["proc-signature"]{Prozedur-Signatur}))]
|
|
@#,racket[(list sig)]
|
|
@#,racket[(code:line %a %b %c (code:comment @#,seclink["signature-variable"]{Signatur-Variable}))]
|
|
@#,racket[(combined sig (... ...))]
|
|
@#,racket[signature]
|
|
]
|
|
[test-case @#,racket[(check-expect expr expr)]
|
|
@#,racket[(check-within expr expr expr)]
|
|
@#,racket[(check-member-of expr expr (... ...))]
|
|
@#,racket[(check-range expr expr expr)]
|
|
@#,racket[(check-error expr expr)]
|
|
@#,racket[(check-property expr)]]
|
|
#;(...
|
|
[library-require @#,racket[(require string)]
|
|
@#,racket[(require module-id)]
|
|
@#,racket[(require (lib string string ...))]
|
|
@#,racket[(require (planet string package))]])
|
|
#;(...
|
|
[package @#,racket[(string string number number)]])))
|
|
|
|
(define prim-nonterms
|
|
(make-splice
|
|
(list
|
|
|
|
@t{Ein @racket[_id] ist eine Folge von Zeichen, die weder Leerzeichen
|
|
noch eins der folgenden Zeichen enthält:}
|
|
|
|
@t{@hspace[2] @litchar{"} @litchar{,} @litchar{'} @litchar{`}
|
|
@litchar{(} @litchar{)} @litchar{[} @litchar{]}
|
|
@litchar["{"] @litchar["}"] @litchar{|} @litchar{;}
|
|
@litchar{#}}
|
|
|
|
@t{Ein @racket[_number] ist eine Zahl wie z.B. @racket[123], @racket[3/2] oder
|
|
@racket[5.5].}
|
|
|
|
@t{Ein @racket[_string] ist eine Zeichenkette, und durch ein Paar von @litchar{"} umschlossen.
|
|
So sind z.B. @racket["abcdef"],
|
|
@racket["This is a string"] und @racket[#,ex-str] Zeichenketten.}
|
|
)))
|