The *.api files are not a good idea. It is better to keep those in C, possibly stylized C, and parse them in racket, just as is done with the other. Next goal: zl api distiller. Use a packrat parser in racket: http://bford.info/packrat/ https://github.com/kazzmir/Pegs http://www.lshift.net/blog/2005/08/11/extensible-parsing-systems/ But it's probably best to avoid parsing, and specify the api in s-expressions. Maybe in a way that is compatible with cauterize? At least, once it is available in s-exp it is easy to translate to something else.