
- put the tests together with the other define-union-language tests - fix the docs - add a release note - construct the merged language a bit more directly - properly deal with this kind of thing: (define-language L1 (e f ::= 1 2 3)) (define-language L2 (e g ::= 4 5 6)) (define-union-language L L1 L2)
30 lines
1.2 KiB
Racket
30 lines
1.2 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))
|