{"status":"ok","message-type":"work","message-version":"1.0.0","message":{"indexed":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:56:06Z","timestamp":1776891366583,"version":"3.51.2"},"reference-count":46,"publisher":"Centre pour la Communication Scientifique Directe (CCSD)","issue":"5-6","license":[{"start":{"date-parts":[[2008,10,15]],"date-time":"2008-10-15T00:00:00Z","timestamp":1224028800000},"content-version":"unspecified","delay-in-days":44,"URL":"https:\/\/www.cambridge.org\/core\/terms"}],"content-domain":{"domain":[],"crossmark-restriction":false},"short-container-title":["J. Funct. Prog."],"published-print":{"date-parts":[[2008,9]]},"abstract":"<jats:title>Abstract<\/jats:title>\n                  <jats:p>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 \u2018towers\u2019 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.<\/jats:p>","DOI":"10.1017\/s0956796808006928","type":"journal-article","created":{"date-parts":[[2008,10,15]],"date-time":"2008-10-15T05:33:12Z","timestamp":1224048792000},"page":"707-780","source":"Crossref","is-referenced-by-count":13,"title":["Building language towers with Ziggurat"],"prefix":"10.46298","volume":"18","author":[{"given":"DAVID","family":"FISHER","sequence":"first","affiliation":[]},{"given":"OLIN","family":"SHIVERS","sequence":"additional","affiliation":[]}],"member":"25203","published-online":{"date-parts":[[2008,10,15]]},"reference":[{"key":"S0956796808006928_ref45","doi-asserted-by":"crossref","unstructured":"van Wyk E. , Krishnan L. , Brodin D. & Schwerdfeger A. (2007) Attribute grammar-based language extensions for Java. Pages 575\u2013599 of: Proceedings of the 2007 European Conference on Object-Oriented Programming (ECOOP '07). Lecture Notes in Computer Science, vol. 4609. Springer-Verlag.","DOI":"10.1007\/978-3-540-73589-2_27"},{"key":"S0956796808006928_ref12","doi-asserted-by":"crossref","unstructured":"Clinger W. & Rees J. (1991) Macros that work. Pages 155\u2013162 of: Proceedings of the 18th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL '91). ACM.","DOI":"10.1145\/99583.99607"},{"key":"S0956796808006928_ref5","doi-asserted-by":"crossref","unstructured":"Baker J. & Hsieh W. C. (2002) Maya: Multiple-dispatch syntax extension in Java. Pages 270\u2013281 of: Proceedings of the 2002 ACM SIGPLAN Conference on Programming Language Design and Implementation (PLDI'02). ACM.","DOI":"10.1145\/512529.512562"},{"key":"S0956796808006928_ref22","doi-asserted-by":"crossref","DOI":"10.7551\/mitpress\/5801.001.0001","volume-title":"The Reasoned Schemer","author":"Friedman","year":"2005"},{"key":"S0956796808006928_ref23","doi-asserted-by":"publisher","DOI":"10.1145\/1133255.1133987"},{"key":"S0956796808006928_ref15","volume-title":"Writing Hygienic Macros in Scheme With Syntax-Case.","author":"Dybvig","year":"1992"},{"key":"S0956796808006928_ref21","doi-asserted-by":"crossref","unstructured":"Ford B. (2002) Packrat parsing: Simple, powerful, lazy, linear time. Pages 36\u201347 of: Proceedings of the Seventh ACM SIGPLAN International Conference on Functional Programming (ICFP 2002). ACM.","DOI":"10.1145\/581478.581483"},{"key":"S0956796808006928_ref44","doi-asserted-by":"crossref","unstructured":"van Wyk E. , de Moor O. , Backhouse K. & Kwiatkowski P. (2002) Forwarding in attribute grammars for modular language design. Pages 128\u2013142 of: Proceedings of the 11th International Conference on Compiler Construction (CC '02). Lecture Notes in Computer Science, vol. 2304. Springer-Verlag.","DOI":"10.1007\/3-540-45937-5_11"},{"key":"S0956796808006928_ref6","unstructured":"Barendregt H. (1984) The Lambda Calculus: Its Syntax and Semantics. Rev. ed. Studies in Logic and the Foundation of Mathematics, vol. 103. Amsterdam, The Netherlands, North-Holland."},{"key":"S0956796808006928_ref29","doi-asserted-by":"publisher","DOI":"10.1145\/606666.606678"},{"key":"S0956796808006928_ref46","first-page":"216","volume-title":"Program Transformation With Stratego\/XT: Rules, Strategies, Tools, and Systems in StrategoXT-0.9","author":"Visser","year":"2004"},{"key":"S0956796808006928_ref41","doi-asserted-by":"crossref","unstructured":"Shivers O. (2005) The anatomy of a loop: A story of scope and control. Pages 2\u201314 of: Proceedings of the 10th ACM SIGPLAN International Conference on Functional Programming (ICFP 2005). ACM.","DOI":"10.1145\/1086365.1086368"},{"key":"S0956796808006928_ref17","doi-asserted-by":"crossref","unstructured":"Ekman T. & Hedin G. (2004) Rewritable reference attributed grammars. Pages 147\u2013171 of: Proceedings of the 2004 European Conference on Object-Oriented Programming (ECOOP '04). Lecture Notes in Computer Science, vol. 3086. Springer-Verlag.","DOI":"10.1007\/978-3-540-24851-4_7"},{"key":"S0956796808006928_ref35","doi-asserted-by":"crossref","unstructured":"Pennello T. J. (1986) Very fast LR parsing. Pages 145\u2013151 of: Proceedings of the 5th ACM SIGPLAN Symposium on Compiler Construction (CC '86). ACM.","DOI":"10.1145\/12276.13326"},{"key":"S0956796808006928_ref26","volume-title":"Pages 353\u2013387 of: UNIX Programmer's Manual","author":"Johnson","year":"1979"},{"key":"S0956796808006928_ref32","unstructured":"Nanavati R. A. (2000, Sept.) Extensible syntax in the presence of static analysis. M.Phil. Thesis. Cambridge, MA: Massachusetts Institute of Technology."},{"key":"S0956796808006928_ref1","volume-title":"Structure and Interpretation of Computer Programs","author":"Abelson","year":"1985"},{"key":"S0956796808006928_ref16","doi-asserted-by":"publisher","DOI":"10.1007\/BF01806308"},{"key":"S0956796808006928_ref33","doi-asserted-by":"crossref","unstructured":"Nystrom N. , Qi X. & Myers A. C. (2006) J&: Nested intersection for scalable software composition. Pages 21\u201336 of: Proceedings of the 21st ACM SIGPLAN Conference on Object-Oriented Programing, Systems, Languages, and Applications (OOPSLA'06). ACM.","DOI":"10.1145\/1167473.1167476"},{"key":"S0956796808006928_ref34","doi-asserted-by":"crossref","unstructured":"Olinsky R. , Lindig C. & Ramsey N. (2006) Staged allocation: A compositional technique for specifying and implementing procedure calling conventions. Pages 409\u2013421 of: Conference record of the 33rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL '06). ACM.","DOI":"10.1145\/1111037.1111073"},{"key":"S0956796808006928_ref37","doi-asserted-by":"crossref","unstructured":"Pottier F. & R\u00e9gis-Gianas Y. (2005) Towards efficient, typed LR parsers. Pages 155\u2013180 of: ACM workshop on ML. Electronic Notes in Theoretical Computer Science, vol. 148, no. 2. Elsevier.","DOI":"10.1016\/j.entcs.2005.11.044"},{"key":"S0956796808006928_ref43","doi-asserted-by":"crossref","unstructured":"Ungar D. & Smith R. B. (1987) Self: The power of simplicity. Pages 227\u2013242 of: Proceedings of the 2nd ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA '87). ACM.","DOI":"10.1145\/38765.38828"},{"key":"S0956796808006928_ref8","doi-asserted-by":"crossref","unstructured":"Bravenboer M. & Visser E. (2004) Concrete syntax for objects: Domain-specific language embedding and assimilation without restrictions. Pages 365\u2013383 of: Proceedings of the 19th Annual ACM SIGPLAN Conference on Object-Oriented Programing, Systems, Languages, and Applications (OOPSLA'04), Schmidt D. C. (ed). ACM.","DOI":"10.1145\/1028976.1029007"},{"key":"S0956796808006928_ref19","doi-asserted-by":"crossref","unstructured":"Flatt M. (2002) Composable and compilable macros: You want it when? Pages 72\u201383 of: Proceedings of the 7th ACM SIGPLAN International Conference on Functional Programming (ICFP '02). ACM.","DOI":"10.1145\/581478.581486"},{"key":"S0956796808006928_ref10","volume-title":"The Calculi of Lambda-Conversion","author":"Church","year":"1941"},{"key":"S0956796808006928_ref31","doi-asserted-by":"publisher","DOI":"10.1145\/319301.319345"},{"key":"S0956796808006928_ref20","volume-title":"Pages 41\u201352 of: Proceedings of the 5th Workshop on Scheme and Functional Programming (Scheme '04)","author":"Flatt","year":"2004"},{"key":"S0956796808006928_ref18","doi-asserted-by":"crossref","unstructured":"Ekman T. & Hedin G. (2007) The JastAdd extensible Java compiler. Pages 1\u201318 of: Proceedings of the 22nd Annual ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA '07). ACM.","DOI":"10.1145\/1297027.1297029"},{"key":"S0956796808006928_ref9","unstructured":"Byrd W. E. & Friedman D. P. (2006, September) From variadic functions to variadic relations: A miniKanren perspective. Proceedings of the Seventh Workshop on Scheme and Functional Programming. Tech. Rept. TR-2006-06. Computer Science Department, University of Chicago."},{"key":"S0956796808006928_ref39","volume-title":"The Dylan Reference Manual","author":"Shalit","year":"1996"},{"key":"S0956796808006928_ref7","doi-asserted-by":"publisher","DOI":"10.1016\/S1571-0661(05)82630-1"},{"key":"S0956796808006928_ref13","doi-asserted-by":"crossref","unstructured":"Cousot P. & Cousot R. (1977) Abstract interpretation: A unified lattice model for static analysis of programs by construction or approximation of fixpoints. Pages 238\u2013252 of: Conference Record of the Fourth ACM Symposium on Principles of Programming Languages (POPL '77). ACM.","DOI":"10.1145\/512950.512973"},{"key":"S0956796808006928_ref4","doi-asserted-by":"crossref","unstructured":"Bachrach J. & Playford K. (2001) The Java syntactic extender. Pages 31\u201342 of: Proceedings of the 16th ACM SIGPLAN Conference on Object-Oriented Programming Systems, Languages and Applications (OOPSLA '01). ACM.","DOI":"10.1145\/504282.504285"},{"key":"S0956796808006928_ref36","doi-asserted-by":"crossref","unstructured":"Peyton Jones S. , Eber J.-M. & Seward J. (2000) Composing contracts: An adventure in financial engineering (functional pearl). Pages 280\u2013292 of: Proceedings of the 5th ACM SIGPLAN International Conference on Functional Programming (ICFP '00). ACM.","DOI":"10.1145\/351240.351267"},{"key":"S0956796808006928_ref2","doi-asserted-by":"crossref","unstructured":"Andreae C. , Noble J. , Markstrum S . & Millstein T. (2006) A framework for implementing pluggable type systems. Pages 57\u201374 of: Proceedings of the 21st ACM SIGPLAN Conference on Object-Oriented Programing, Systems, Languages, and Applications (OOPSLA'06). ACM.","DOI":"10.1145\/1167473.1167479"},{"key":"S0956796808006928_ref11","article-title":"Hygienic macros through explicit renaming","volume":"4","author":"Clinger","year":"1991","journal-title":"LISP Point."},{"key":"S0956796808006928_ref24","volume-title":"Pages 48\u201362 of: Proceedings of the 17th European Symposium on Programming (ESOP 2008)","author":"Herman","year":"2008"},{"key":"S0956796808006928_ref30","doi-asserted-by":"crossref","unstructured":"Might M. & Shivers O. (2006) Improving flow analyses via \u0393CFA: Abstract garbage collection and counting. Pages 13\u201325 of: Proceedings of the 11th ACM SIGPLAN International Conference on Functional Programming (ICFP 2006). ACM.","DOI":"10.1145\/1160074.1159807"},{"key":"S0956796808006928_ref25","unstructured":"ISO. (2004) VRML ISO\/IEC 14772 Standard Document [Online]. Available at: http:\/\/www.web3d.org\/x3d\/specifications\/vrml\/"},{"key":"S0956796808006928_ref3","doi-asserted-by":"publisher","DOI":"10.1017\/CBO9781139172752"},{"key":"S0956796808006928_ref27","volume-title":"Pages 258\u2013272 of: Proceedings of the 8th European Symposium on Programming Languages and Systems (ESOP '99)","author":"Krishnamurthi","year":"1999"},{"key":"S0956796808006928_ref28","doi-asserted-by":"publisher","DOI":"10.21236\/ADA632162"},{"key":"S0956796808006928_ref38","first-page":"389","volume-title":"The Essence of ML Type Inference","author":"Pottier","year":"2005"},{"key":"S0956796808006928_ref14","doi-asserted-by":"publisher","DOI":"10.1145\/69622.357187"},{"key":"S0956796808006928_ref42","doi-asserted-by":"crossref","unstructured":"Taha W. & Sheard T. (1997) Multi-stage programming with explicit annotations. Pages 203\u2013217 of: Proceedings of the 1997 ACM SIGPLAN Symposium on Partial Evaluation and Semantics-Based Program manipulation (PEPM '97). ACM.","DOI":"10.1145\/258993.259019"},{"key":"S0956796808006928_ref40","unstructured":"Shivers O. (1991, May) Control-Flow Analysis of Higher-Order Languages, or Taming Lambda. Ph.D. Thesis. School of Computer Science, Carnegie Mellon University, Pittsburgh, PA, Technical Report CMU-CS-91-145."}],"container-title":["Journal of Functional Programming"],"original-title":[],"language":"en","link":[{"URL":"https:\/\/www.cambridge.org\/core\/services\/aop-cambridge-core\/content\/view\/S0956796808006928","content-type":"unspecified","content-version":"vor","intended-application":"similarity-checking"}],"deposited":{"date-parts":[[2026,4,22]],"date-time":"2026-04-22T20:19:11Z","timestamp":1776889151000},"score":1,"resource":{"primary":{"URL":"https:\/\/www.cambridge.org\/core\/product\/identifier\/S0956796808006928\/type\/journal_article"}},"subtitle":[],"short-title":[],"issued":{"date-parts":[[2008,9]]},"references-count":46,"journal-issue":{"issue":"5-6","published-print":{"date-parts":[[2008,9]]}},"alternative-id":["S0956796808006928"],"URL":"https:\/\/doi.org\/10.1017\/s0956796808006928","relation":{},"ISSN":["0956-7968","1469-7653"],"issn-type":[{"value":"0956-7968","type":"print"},{"value":"1469-7653","type":"electronic"}],"subject":[],"published":{"date-parts":[[2008,9]]}}}