[plt-scheme] How to use syntax case?
On May 28, 2007, at 1:01 PM, Grant Rettke wrote:
> I'm starting with syntax case from zero. My end goal is to read a file
> and extract a definition by name, for example "define impl1" so that I
> can include it in another document.
>
> Reading about syntax objects and playing around with the results of
> read-syntax I can see what I want, because when printf it or call
> (syntax-object->datum impl1-stx) on it I see that function:
>
> (define impl1
> (λ (max)
> (let loop ((x 1) (y 2) (sum 0))
> (let* ((new-x y) (new-y (+ x y)) (new-sum (if (even? y) (+ sum
> y) sum)))
> (cond ((> y max) sum) (else (loop new-x new-y new-sum)))))))
>
> It seems like I can use syntax-case to analyze each syntax object in
> the list read in and try to match on impl1. The only problem is that
> I've got absolutely no idea how to do this.
>
> Where do I start?
1) You almost certainly want to expand the result of read-syntax, to
expand away uses of macros (that might turn out to be definitions).
2) If it's at all helpful, the no-brainer tool (cf. planet) uses
syntax-case in the way you describe, to traverse an expanded
expression. It's looking for unused bindings and arity errors, but
the traversal will be similar.
3) The traversal encapsulated by the no-brainer tool is a bit out-of-
date; you'll probably want to look at the "Syntax" chapter of the
MzScheme manual to see the most recent data definition for the
results of 'expand'.
John Clements
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2223 bytes
Desc: not available
URL: <http://lists.racket-lang.org/users/archive/attachments/20070528/a7802b41/attachment.p7s>