78 lines
1.8 KiB
Scheme
78 lines
1.8 KiB
Scheme
(define-language Lannotated
|
|
(entry Defn)
|
|
(terminals
|
|
(record-constructor-descriptor (rcd))
|
|
(record-type-descriptor (rtd))
|
|
(exact-integer (tag level tag-mask))
|
|
(datum (handler record-name pred all-pred all-term-pred
|
|
accessor maker))
|
|
(box (b))
|
|
(syntax (stx))
|
|
(identifier (id))
|
|
(dots (dots))
|
|
(null (null)))
|
|
(Defn (def)
|
|
(define-language id ref (maybe id0) rtd rcd tag-mask
|
|
(term* ...) nt* ...))
|
|
(Terminal (term)
|
|
(id (id* ...) b (maybe handler) pred))
|
|
(Nonterminal (nt)
|
|
(id (id* ...) b rtd rcd tag pred all-pred all-term-pred
|
|
prod* ...))
|
|
(Production (prod)
|
|
(production pattern (maybe pretty-prod) rtd tag pred maker field* ...)
|
|
(terminal ref (maybe pretty-prod))
|
|
(nonterminal ref (maybe pretty-prod)))
|
|
(Pattern (pattern)
|
|
id
|
|
ref
|
|
null
|
|
(maybe ref)
|
|
(pattern dots)
|
|
(pattern0 dots pattern1 ... . pattern2)
|
|
(pattern0 . pattern1))
|
|
(PrettyProduction (pretty-prod)
|
|
(procedure handler)
|
|
(pretty pattern))
|
|
(Field (field)
|
|
(ref level accessor)
|
|
(optional ref level accessor))
|
|
(Reference (ref)
|
|
(reference id0 id1 b)))
|
|
|
|
(define-language Llanguage
|
|
(entry Defn)
|
|
(terminals
|
|
(box (b))
|
|
(syntax (stx))
|
|
(identifier (id))
|
|
(datum (handler))
|
|
(dots (dots))
|
|
(null (null)))
|
|
(Defn (def)
|
|
(define-language id cl* ...))
|
|
(Clause (cl)
|
|
(entry ref)
|
|
(nongenerative-id id)
|
|
(terminals term* ...)
|
|
(id (id* ...) b prod* ...))
|
|
(Terminal (term)
|
|
simple-term
|
|
(=> simple-term handler))
|
|
(SimpleTerminal (simple-term)
|
|
(id (id* ...) b))
|
|
(Production (prod)
|
|
pattern
|
|
(=> pattern0 pattern1)
|
|
(-> pattern handler))
|
|
(Pattern (pattern)
|
|
id
|
|
ref
|
|
null
|
|
(maybe ref)
|
|
(pattern dots)
|
|
(pattern0 dots pattern1 ... . pattern2)
|
|
(pattern0 . pattern1))
|
|
(Reference (ref)
|
|
(reference id0 id1 b)))
|