13.1 Expansion passing style macros
13.2 Revised(5) macro expansion
Copyright
Acknowledgements
1. Table of contents
2. Overview of Bigloo
3. Modules
4. Core Language
5. Standard Library
6. Pattern Matching
7. Object System
8. Threads
9. Regular parsing
10. Lalr(1) parsing
11. Errors and Assertions
12. Eval and code interpretation
13. Macro expansion
14. Command Line Parsing
15. Explicit typing
16. The C interface
17. The Java interface
18. Bigloo Libraries
19. Extending the Runtime System
20. SRFIs
21. DSSSL support
22. Compiler description
23. User Extensions
24. Bigloo Development Environment
25. Global Index
26. Library Index
Bibliography
|
Bigloo make uses of two macro expansion system. The one based on the
expansion passing style [Dybvig et al. 86] and the one advocated
by the R5RS, for which see http://www.inria.fr/mimosa/fp/Bigloo/doc/r5rs.html.
13.1 Expansion passing style macros
|
define-expander name proc | bigloo syntax |
This form defines an expander, name , where proc
is a procedure of two arguments: a form to macro-expand,
and an expander.
|
define-macro (name [args]...) body | bigloo syntax |
This form is itself macro-expanded into a define-expander form.
Macro expanders cannot be exported or imported since there is no way
to specify expanders in a module declaration.
Macros defined with define-expander and define-macro
are used by both the compiler and the interpreter.
|
Here is an example of a expander:
(define-expander when
(lambda (x e)
(match-case x
((?- ?test . ?exps)
(e `(if ,test (begin ,@exps)) e))
(else
(error "when" "illegal form" x)))))
(when (> a 0) (print a) a)
==> (if (> a 0) (begin (print a) a))
|
The same example can written with a define-macro form:
(define-macro (when test . exps)
`(if ,test (begin ,@exps)))
|
13.2 Revised(5) macro expansion
|
Bigloo support the Revised(5) Report on the Scheme programming language.
For a detailed documentation see See info-file `r5rs.info', .
let-syntax (binding...) body | syntax |
letrec-syntax (binding...) body | syntax |
define-syntax keyword transformer | syntax |
These three forms are compatible with the description of the
Revised(5) Report on the Algorithmic Language Scheme.
Implementation Note: Current Bigloo does not ensure hygiene for
let-syntax and letrec-syntax . Hygienic expansion is
only guaranteed for define-syntax .
|
|