Ziggurat is a meta-language system that permits programmers to develop Scheme-like macros for
languages with nontrivial static semantics, such as C or Java (suitably encoded in an S-expression
concrete syntax). Ziggurat permits language designers to construct “towers” of language levels with
macros; each level in the tower may have its own static semantics, such as type systems or flow
analyses. Crucially, the static semantics of the languages at two adjacent levels in the tower can be
connected, allowing improved reasoning power at a higher level to be reflected down to the static
semantics of the language level below. We demonstrate the utility of the Ziggurat framework by implementing
higher-level language facilities as macros on top of an assembly language, utilizing static
semantics such as termination analysis, a polymorphic type system and higher-order flow analysis.