I have built up a good toolchain for C programming including static analysis and runtime testing tools, but I find the C preprocessor is really lacking for metaprogramming facilities.
Here is an implementation of "Lisp" macros for C: https://github.com/eudoxia0/cmacro It doesn't seem to be actively maintained and a bit buggy (weird formatting errors), and, well, it's Common Lisp :\ I made a start on converting the above into Racket: https://github.com/spearman/rcmacro At this point it is little more than a main module with command-line options and stubs for the rest of the implementation. Two sticking points so far are error handling and finding a replacement for the "packrat parser" (esrap) that cmacro relies on, as highlighted here: https://github.com/eudoxia0/cmacro/blob/master/src/parser.lisp#L290 If there is something available for Racket along the same lines as esrap, which uses TDPL grammar, I may be able to move forward with adapting this code, otherwise it might be a lost cause and better off just coming up with something from scratch (and I might learn something in the process). However it seems like a large task and I would be essentially starting from first principles. Before I make a choice on whether to proceed, I wanted check first if there are already any Racket-based (or Scheme-based!) implementations of macros for C. There is this Racket implementation for C++: https://github.com/elfprince13/RacketMacros4Cxx but it requires a custom llvm/clang build, and the "demos" don't look very much like what I had in mind. Mostly what I am looking for is a Scheme-like "macro-by-example" syntax to provide some level of syntactic information (and hopefully hygiene) above what the C preprocessor gives, but not necessarily full-blown "cooperating" (MTWT) Racket macros. Comments/suggestions are appreciated. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

