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