An Illumination of the Template Enigma : Software Code Generation with Templates
Total Page:16
File Type:pdf, Size:1020Kb
An illumination of the template enigma : software code generation with templates Citation for published version (APA): Arnoldus, B. J. (2011). An illumination of the template enigma : software code generation with templates. Technische Universiteit Eindhoven. https://doi.org/10.6100/IR693494 DOI: 10.6100/IR693494 Document status and date: Published: 01/01/2011 Document Version: Publisher’s PDF, also known as Version of Record (includes final page, issue and volume numbers) Please check the document version of this publication: • A submitted manuscript is the version of the article upon submission and before peer-review. There can be important differences between the submitted version and the official published version of record. People interested in the research are advised to contact the author for the final version of the publication, or visit the DOI to the publisher's website. • The final author version and the galley proof are versions of the publication after peer review. • The final published version features the final layout of the paper including the volume, issue and page numbers. Link to publication General rights Copyright and moral rights for the publications made accessible in the public portal are retained by the authors and/or other copyright owners and it is a condition of accessing publications that users recognise and abide by the legal requirements associated with these rights. • Users may download and print one copy of any publication from the public portal for the purpose of private study or research. • You may not further distribute the material or use it for any profit-making activity or commercial gain • You may freely distribute the URL identifying the publication in the public portal. If the publication is distributed under the terms of Article 25fa of the Dutch Copyright Act, indicated by the “Taverne” license above, please follow below link for the End User Agreement: www.tue.nl/taverne Take down policy If you believe that this document breaches copyright please contact us at: [email protected] providing details and we will investigate your claim. Download date: 11. Oct. 2021 An Illumination of the Template Enigma Software Code Generation with Templates PROEFSCHRIFT ter verkrijging van de graad van doctor aan de Technische Universiteit Eindhoven, op gezag van de rector magnificus, prof.dr.ir. C.J. van Duijn, voor een commissie aangewezen door het College voor Promoties in het openbaar te verdedigen op dinsdag 1 februari 2011 om 16.00 uur door Bastiaan Jeroen Arnoldus geboren te Amstelveen Dit proefschrift is goedgekeurd door de promotor: prof.dr. M.G.J. van den Brand Copromotoren: dr.ir. J.J. Brunekreef en dr. A. Serebrenik An Illumination of the Template Enigma Software Code Generation with Templates B.J. Arnoldus Promotor: prof.dr. M.G.J. van den Brand (Technische Universiteit Eindhoven) Copromotoren: dr.ir. J.J. Brunekreef (Hogeschool van Amsterdam) dr. A. Serebrenik (Technische Universiteit Eindhoven) Overige leden kerncommissie: prof.dr.rer.nat.habil. U. Aßmann (Technische Universität Dresden) prof.dr. P. Klint (Centrum voor Wiskunde en Informatica) prof.dr. J.J. Lukkien (Technische Universiteit Eindhoven) Het werk in dit proefschrift is uitgevoerd onder auspiciën van de onder- zoekschool IPA (Instituut voor Programmatuurkunde en Algoritmiek). IPA dissertation series 2011-02. A catalogue record is available from the Eindhoven University of Technology Library ISBN: 978-90-386-2418-1 Druk: Printservice Technische Universiteit Eindhoven Omslagontwerp: Raymond van der Aa c B.J. Arnoldus, 2010. All rights reserved. No part of this publication may be reproduced, stored in a re- trieval system, or transmitted, in any form or by any means, electronically, mechan- ically, photocopying, recording or otherwise, without prior permission of the author. Voor: Antonius Arnoldus Monique Arnoldus-Zuiver en Martijn Jan-Willem Arnoldus Dankwoord ort wil ik de mensen bedanken die me hebben geholpen bij mijn onderzoek en het schrijven van mijn proefschrift. Als eerste mijn K promotor Mark van den Brand, die mij tijdens een college verzocht “na te blijven”. Ik wil je bedanken voor de discussies, het delen van gedachten en de begeleiding om dit proefschrift gestalte te geven. Naast de promotor werd ik bijgestaan door de copromotoren Jacob Brunekreef en Alexander Serebrenik. Jacob dank ik voor voor de begeleiding vanuit de Hogeschool van Amsterdam, waar je ervoor zorgde dat ik mijn onderwerp kon behouden. Alexander ben ik erkentelijk voor de ondersteuning bij het formaliseren van mijn theorieën en gedachten. Jeanot Bijpost dank ik voor zijn begeleiding vanuit Mattic. Ik wil de overige leden van de leescommissie, bestaande uit prof.dr.rer.nat.habil. U. Aßmann, prof.dr. P. Klint en prof.dr. J.J. Lukkien, bedanken voor het beoor- delen van mijn proefschrift. Tijdens de verdediging zal ik worden begeleid door de paranimfen Marcel van Amstel en Stephan de Gruijter: sine protectione nulla securitas. De studenten die, gedurende mijn onderzoek, projecten hebben uitgevoerd: Robin Boon, Wouter Bruggeman, Arjan van der Meer, Jos Peeters, Guido Smeets, Maurice van der Star en Aram Verstegen. Ik dank medepromovendi en Braga ’06 lotgenoten: Superbockmeister Zvezdan Protic en Luc –is lost– En- gelen. Loek Cleophas: nooit gedacht dat ik ooit je proefschrift “stuk” zou lezen. Ik dank Martin Bravenboer voor de discussie op het gebied van ambiguïteiten, Jurgen Vinju voor de technische ondersteuning bij ASF+SDF en Sander Bakkes voor zijn LATEX bestanden. Ik ben de Hogeschool van Amsterdam en namens de hogeschool, Marjan Freriks en Kees Rijsenbrij, zeer erkentelijk voor het mogelijk maken van mijn promotieplek. Ik bedank Wilko Oskam voor het vinden van de parel in het woud der woorden en Raymond van der Aa voor de uitbeelding. Zonder Arnim Eijkhoudt en Jan Derriks was er geen bereikbare Oege. Hayco de Jong zorgde voor een segmentation fault. Zonder Yvette Letiche-le Noble, Janet Hofstra en Mark Thomas had ik geen toegang tot Wandelgangen Informatiesysteem. Verder dank ik mijn oud-kamergenoten Anneke Baas, Daan van den Berg, Wilma van Hoogenhuyze en Hans van Koolbergen. Tot slot, Niels van Galen Last, Robin den Held, Dominiek ter Heide, Tristan Suerink, Yme van der Velden, Sil Westerveld; stealth start-ups, “Bestijg de trein nooit zonder uw valies met dromen”, 15-daagse ensembleverwachtingen, bandbreedte, ambulances, Paul, Kanji, maar vooral ntsk ntsk ntsk. Jeroen Arnoldus amsterdam, december 2010 Contents Cover i Contents xi 1 Introduction 1 1.1 Process of Designing . 1 1.2 Level of Abstraction . 3 1.3 Code Generation . 6 1.4 Homogeneous Code Generators . 9 1.5 Heterogeneous Code Generators . 12 1.6 Conclusions . 23 1.7 Problem Statement . 24 2 Preliminaries 27 2.1 Basic Definitions and Notations . 27 2.2 Context-free Grammars . 31 2.3 Regular Tree Grammars . 33 2.4 Relations between CFL and RTL . 34 2.5 Abstract Syntax Trees . 36 2.6 Used Languages and Formalisms . 37 3 The Unparser 43 3.1 Introduction . 43 3.2 Deriving Abstract Syntax Trees . 44 3.3 The Unparser . 50 3.4 Unparser Completeness . 54 3.5 Conclusions . 58 4 The Metalanguage 61 4.1 Introduction . 61 4.2 Code Generators . 62 4.3 Our Metalanguage . 65 x Contents 4.4 Example: The PICO Unparser . 86 4.5 Related Template Systems . 86 4.6 Conclusions . 101 5 Syntax Safe Templates 103 5.1 Introduction . 103 5.2 Syntax Safe Templates . 104 5.3 The Metalanguage Grammar . 110 5.4 Grammar Merging . 116 5.5 Related Work . 118 5.6 Conclusions . 119 6 Repleo: Syntax Safe Template Evaluation 121 6.1 Introduction . 121 6.2 Syntax Safe Evaluation . 122 6.3 Substitution Placeholder . 123 6.4 Match-replace Placeholder . 124 6.5 Subtemplate Placeholder . 125 6.6 Substitution Placeholder Revisited . 126 6.7 Ambiguity Handling . 128 6.8 Separator Handling . 131 6.9 Repleo . 132 6.10 Case Studies . 132 6.11 Related Work . 142 6.12 Conclusions . 144 7 Case Studies 145 7.1 Introduction . 145 7.2 Code Generator Architectures . 146 7.3 Metrics . 150 7.4 A DSL for Web Information Systems . 151 7.5 ApiGen . 157 7.6 NunniFSMGen . 173 7.7 Dynamic XHTML generation . 189 7.8 Conclusions . 200 Contents xi 8 Towards Static Semantic Validation 203 8.1 Introduction . 203 8.2 Static Semantics . 204 8.3 Defining Static Semantic Checkers . 205 8.4 Connecting SGLR and JastAdd . 210 8.5 Static Semantic Checks for Templates . 211 8.6 Related Work . 218 8.7 Future Work . 219 8.8 Conclusions . 221 9 Conclusions 223 9.1 Contributions . 223 9.2 Future Work . 228 9.3 Final Conclusions . 229 Summary 243 Samenvatting 247 Curriculum Vitae 251 1 Introduction reating software is a process of refining a concept to an implementation. This process contains several stages visualized by documents, models and plans at several levels of abstraction. Mostly, the refinement process C requires creativity of the programmers, but sometimes it is a boring repetitive task. This repetitive work is an indication that the program is not written at the most suitable level of abstraction. The level of abstraction offered by the used programming language is probably too low to remove the recurring code. We focus on using code generators to raise the level of abstraction and to automate the repetitive work. In this chapter we present a number of approaches to implement a code generator. We discuss the advantages and disadvantages of the different approaches. This thesis will focus on code generators using templates. We present the research questions in the context of raising the quality of template based code generators. 1.1 Process of Designing Designing is the process of deciding how something will look, work, etcetera, by drawing plans, making models, and so on [2]. One of the design methods is to stepwise refine an abstract idea or concept to a full-fledged, producible design. This way of designing, or developing, is used in a broad range of disci- plines; from storyboard to movie, from equation to electrical amplifier, from sketch to painting and from software requirements specification to computer application.