Oh, I had forgotten that syntax-classes could take arguments.  

Thanks!

On Aug 1, 2014, at 12:45 PM, J. Ian Johnson <[email protected]> wrote:

> Two things: 
> 1) syntax-classes can take parameters, so you can pass an argument to x that 
> is a boolean, within-y?. You can't create a parameterization scope because 
> this is all within the parsing code for syntax-parse. You could mutate a box 
> or parameter with a ~do pattern and reset it after the patterns you want 
> within that "scope," but c'mon. Don't do that.
> 
> (define-syntax-class (x within-y?)
> (pattern _ #:when within-y?))
> 
> (define-syntax-class y
>  (pattern (~var dummy (x #t))))
> 
> [the use-case of nothing to the left of a : to indicate non-binding is 
> something that should be extended to parameterized syntax-classes, probably.]
> 
> 2) If you're communicating between macros and not syntax-classes, you want to 
> use syntax-parameters.
> 
> (require racket/stxparam)
> (define-syntax-parameter within-y? #f)
> 
> (define-syntax-rule (y body) (syntax-parameterize ([within-y? #t]) body))
> (define-syntax-class x
>  (pattern _ #:when (syntax-parameter-value #'within-y?)))
> 
> -Ian
> ----- Original Message -----
> From: "Alexander D. Knauth" <[email protected]>
> To: "racket users list" <[email protected]>
> Sent: Friday, August 1, 2014 12:23:21 PM GMT -05:00 US/Canada Eastern
> Subject: [racket] is there any way to tell syntax-parse to parse a pattern 
> within a parametization ?
> 
> 
> Is there any way to tell syntax-parse to parse a pattern within a 
> parametization ? 
> 
> 
> For example in something like this: 
> (define within-y? (make-parameter #f)) 
> (define-syntax-class x 
> [pattern _ #:when (within-y?)]) 
> (define-syntax-class y 
> [pattern :x]) 
> (define (parse stx) 
> (syntax-parse stx 
> [:y #t])) 
> 
> 
> How do I tell it to parse the y syntax-class within a (parameterize 
> ([within-y? #t]) …) form? 
> 
> 
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users


____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to