48 lines
1.7 KiB
Racket
48 lines
1.7 KiB
Racket
(#rx"define-language:.*expression context"
|
|
([illegal-def (define-language L)])
|
|
(values illegal-def))
|
|
|
|
(#rx"define-language:.*unquote disallowed"
|
|
([illegal-unquote ,3])
|
|
(let ()
|
|
(define-language L
|
|
(n illegal-unquote))
|
|
(void)))
|
|
|
|
; error message shows correct form name
|
|
(#rx"define-extended-language:.*underscore"
|
|
([bad-underscore y_1])
|
|
(let ()
|
|
(define-language L)
|
|
(define-extended-language M L
|
|
(z () (1 bad-underscore)))
|
|
(void)))
|
|
|
|
(#rx"expected an identifier" ([not-id (L)]) (define-language not-id))
|
|
(#rx"expected at least one production" ([separator ::=]) (define-language L (x separator)))
|
|
(#rx"expected at least one production" ([nt x]) (define-language L (nt)))
|
|
(#rx"expected at least one production" ([nt-pos (x)]) (define-language L (nt-pos)))
|
|
(#rx"expected preceding non-terminal names" ([separator ::=]) (define-language L (separator a b)))
|
|
(#rx"expected non-terminal name" ([not-nt (y)]) (define-language L (x not-nt ::= z)))
|
|
(#rx"expected production" ([not-prod ::=]) (define-language L (x ::= y not-prod z)))
|
|
(#rx"expected non-terminal definition" ([not-def q]) (define-language L not-def))
|
|
(#rx"expected non-terminal definition" ([not-def ()]) (define-language L not-def))
|
|
|
|
("define-union-language: two sublanguages both contribute the non-terminal: e"
|
|
([L1r L1] [L2r L2]) ([L1 L1] [L2 L2])
|
|
(let ()
|
|
(define-language L1
|
|
(e any))
|
|
(define-language L2
|
|
(e any))
|
|
(define-union-language L L1r L2r)))
|
|
|
|
("define-union-language: two sublanguages both contribute the non-terminal: -e"
|
|
([L1r L1] [L2r (- L2)]) ([L1 L1] [L2 L2])
|
|
(let ()
|
|
(define-language L1
|
|
(-e any))
|
|
(define-language L2
|
|
(e any))
|
|
(define-union-language L L1r L2r)))
|