1 C Metaprogramming Utilities
This package provides utilities for manipulating C programs.
1.1 Getting Started
The easiest way to get started using the C metaprogramming utilities is with the main module:
(require (planet dherman/c:3:3)) |
This module provides everything in the entire package. Subsequent sections of this manual describe the functionality of the individual libraries included, which can also be required individually.
Examples: | ||||||||||||||||||
|
library—
1.2 Libraries Provided by this Package
This package includes:
A library of abstract syntax for the C99 language–see The C Language
A library for parsing C99 programs–see Parsing and Reading C
A (preliminary) library providing S-expression syntax for C–see Parenthetical C
A library for compiling and running C programs with an external compiler–see Evaluation
A library for compiling C header information–see Header Compilation
1.3 Known Limitations
The parser does not recognize the C preprocessor. I may attempt to implement the preprocessor in the future, but there’s no guarantee at this point.
The grammar does not support any extensions for GCC, MSVC, or any other specific C implementations. I intend to add support for these extensions on a by-need basis. Specific requests (as well as patches) are welcome.
External compilation is currently limited to GCC. I intend to add support for additional compilers on a by-need basis; patches are welcome.
1.4 Feedback and Bug Reports
Before sending feedback or bug reports, please consult the current set of registered issues. If you cannot find your issue there, feel free to file a new bug report in the online issue database.
Any other feedback may be emailed to me, Dave Herman, at dherman@ccs.neu.edu.
1.5 History
Version 0.1 (2009-02-01) - Initial release. Reasonably usable for header extraction.
Version 0.2 (2009-03-09) - Full C99 parser implemented.
Version 0.3 (2009-03-31) - Some cleanup of the AST API.
Version 0.4 (2009-09-16) - Fixed parser bug 202: the grammar should be complete now.
Version 0.5 (2011-04-11) - JBC fixes handling of ||, |, and |=