[plt-scheme] Grammar abstractions in parser-tools collection?
Is it possible to write grammar abstractions for use with the
parser-tools collection?
I'm writing a parser for a grammar that has several productions of the
form
Xs ::= X Xs
| <empty>
for various values of X. Conveniently enough, the actions associated
with these productions are the same. I'd like to try to abstract this
out, but I don't know how to do that.
I tried
(define-syntax seq-of-production
(syntax-rules ()
[(_ <seq> <elt>)
(<seq> [(<elt> <seq>) (sequence-cons $1 $2)]
[() (sequence-empty)])]))
and then
(parser
...
[grammar
(seq-of-production <fdefns> <fdefn>)
(seq-of-production <mdefns> <mdefn>)
(seq-of-production <sdefns> <sdefn>)
(seq-of-production <cdefns> <cdefn>)
(<fdefn> ...)
(<mdefn> ...)
(<sdefn> ...)
(<cdefn> ...)
...])
but that doesn't work; the parser generator complains that I'm defining
the non-terminal "seq-of-production" multiple times.
So it looks like the grammar rules in a parser are not in a macro
expansion context.
Is there another way to go about this, or am I out of luck?
Thanks,
Richard