(resending due to issues posting to list) Jos,
What are you trying to model with your language? Are you trying to model a binary + operation that can add only 2 numbers? Or maybe you are trying to model a binary + operation that can add any 2 terms? What about an n-ary + operation that can add any number of terms? -- William J. Bowman On Sun, Apr 26, 2015 at 05:44:19PM +0200, Jos Koot wrote: > Hi Matthias, > > Sofar I have the following: > > (require redex) > > (define-language jk > (t n v > (side-condition (t x_1 ...) (term (check (x_1 ...))))) > ; mark x_1 in stead of x. > ; without suffix _1 x is not bound in the guard. > (x + t) > (n number) > (v (variable-except +))) > > (define-metafunction jk check : any -> any > ((check ()) #t) > ((check (+ t x_1 ...)) (check (x_1 ...))) > ((check else) #f)) > > (redex-match? jk t 1) ; -> #t > (redex-match? jk t (term (1 + 1))) ; -> #t > (redex-match? jk t (term (1 + 1 + 1 + 1))) ; -> #t > (redex-match? jk t (term ((1 + 1 + 1) + a + (1 + 1 + 1)))) ; -> #t > > Or did you have something different in mind? > Thanks, Jos > > _____ > > From: [email protected] [mailto:[email protected]] > On Behalf Of Matthias Felleisen > Sent: sábado, 25 de abril de 2015 19:38 > To: Jos Koot > Cc: [email protected] > Subject: Re: [racket-users] define-language, trouble with parentheses. > > > > Redex's term-language is about defining __abstract__ syntax not concrete > syntax. > For the former, the tricks of concrete syntax don't matter. > > So let's think, how would you generalize > > #lang racket > > (require redex) > > (define-language jk > (t n > (n + t) > (n + n + t) > (n + n + n + t)) > (n number)) > > (redex-match? jk t 1) > (redex-match? jk t (+ 1 1)) > (redex-match? jk t (+ 1 1 1)) > > with the tools you have in Redex? -- Matthias > > > > > > > On Apr 24, 2015, at 5:30 PM, Jos Koot wrote: > > > I have trouble translating the following into a define-language form: > > term ::= number > term ::= number + term > > An attempt like: > > (define-language my-language > (term number (number + term)) > > does not work. It accepts (1 + (2 + 3)) and ((1 + 2) +3) but not (1 + 2 + > 3). > > May be there already is a method to do something like: > > > (define-language my-language > (term number (number + ,@term-list)) > (term-list (term))) > > or > > (define-languafe my-language > (term (number + number ... ...))) > > where the first ... refers to + and the second one to number, alternating of > course. > > If something like the above two above already is possible in some way, > please direct me to the related parts of the docs. > If not, would it be a great efffort to allow ,@ or ... ... in a > language-definition-clause? > If not too big an effort may be I could try to implement it, but I warn you, > I would need much guidance. > > Thanks, Jos > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > > > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to the Google Groups > "Racket Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
pgp6nuoRH5Jpt.pgp
Description: PGP signature

