racket/collects/redex/tests/syn-err-tests/language-definition.rktd
2012-02-29 00:28:11 -05:00

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)))