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 racket-users+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.