A syntax expander is called to transform an S-expression into an equivalent S-expression that contains fewer (or no) nested macros. If a syntactic form contains no Scheme subexpressions, then the expander can be the identity function. Otherwise, all subexpressions must be recursively expanded.
In addition to the expression to be expanded and the current environment, an expander is passed a depth parameter. This parameter can be ignored or simply passed on to other expansion calls.