This monograph is concerned with the problem of getting computers to transform formal language definitions into compilers. Its purpose is to demonstrate how certain simple theoretical ideas can be used to generate compilers and even compiler generators. As the title suggests, a realistic assessment of the relationship between the complexity of realistic compilation and the relative simplicity studied in theoretical work is attempted. The monograph contains an overview of existing compiler generators. The CERES '83 compiler generator, developed by Neil D. Jones and the author, is described in detail. The CERES system is based on the idea of composing language definitions and it serves as an example of a powerful novel "bootstrapping" technique by which one can generate compiler generators as well as compilers by considering a compiler generator to be, in a sense which is made mathematically precise, a special kind of compiler. The core of the CERES system is a two-page-long machine generated compiler generator. The approach uses ideas from denotational semantics and many-sorted algebra and connects them with novel ideas about how to treat programs and language definitions as data. Considerable effort has been made to present the necessary theory in a manner suitable for readers who have some practical experience but not necessarily a theoretical background in semantics.
1 Introduction.- 1.1 The Scope of This Monograph.- 2 Report on the Compiler Generator CERES.- 2.1 Overview of CERES.- 2.1.1 On Composition of Programs.- 2.2 Description of Input to CERES.- 2.2.1 On "Concrete" Versus "Abstract" Syntax.- 2.2.2 The Semantic Language S.- 2.2.3 Writing Language Definitions.- 126.96.36.199 An Example: the Definition of LOOP.- 188.8.131.52 Extension with Products.- 184.108.40.206 Important Terminology Concerning Definitions.- 220.127.116.11 The Differences Between the Languages D and DS.- 2.2.4 Writing Interpretations.- 2.3 The Object Language T.- 2.4 The Compilers Generated by CERES.- 2.4.1 Translation from S into T by dS2T.- 2.4.2 Compilers Written as "Compiling Definitions".- 2.4.3 Compilers Written as Object Programs.- 2.4.4 Summary.- 2.5 The Compiler Generator.- 2.5.1 Compiler Generation Considered as Compilation.- 2.5.2 Definitions Regarded as Programs.- 18.104.22.168 The Abstract Syntax D of Definitions.- 22.214.171.124 The Language D.- 2.5.3 Translation from ? to D? by d' S2T.- 2.5.4 Translation from D? to S by dD?2S.- 2.5.5 The Definition ? of ?.- 2.5.6 The Compiler Generator cocom.- 2.5.7 How cocom Itself Was Generated.- 2.6 Implementation and Experience.- 2.6.1 Hardware and Software.- 2.6.2 Performance.- 2.6.3 The CERES Project.- 3 Compiler Generation, Composability, and Self-composability.- 3.1 Programming Languages and Compilers.- 3.2 The Compiler Generation Problem.- 3.3 Using a Semantic Language to Define Programming Languages.- 3.4 Composability and Self-composability.- 4 Discussion of Technical Aspects of Compiler Generation.- 4.1 The Algebraic Connection.- 4.1.1 Basic Concepts.- 4.1.2 Compiler Algebras and Homomorphic Translation.- 4.1.3 The Difference Between Compiler Algebras and Target Language Algebras.- 4.1.4 On the Need for Powerful Compiler Algebra Operations.- 4.1.5 Conclusion.- 4.2 On Choosing Good Semantic Languages.- 4.2.1 Mosses' "Semantics Implementation System" (SIS).- 4.2.2 Paulson's Compiler Generator (PCG).- 4.2.3 CERES and LAMBDA-CERES.- 4.2.4 The SAM System.- 4.2.5 Conclusion.- 4.3 Interface Problems.- 5 On Semantics, Compiler Generation, and Hacking.- 5.1 On the Nature of Machine-Readable Language Definitions.- 5.2 On Writing Language Definitions.- 5.3 On the Role of Mathematical Proofs.- Appendix 1 The LOOP Interpretation.- Appendix 4 The SelfComposer.- References.- Table of Symbols and Their Meanings.
Series: Monographs in Theoretical Computer Science. an Eatcs Series
Number Of Pages: 147
Published: 27th June 1990
Publisher: Springer-Verlag Berlin and Heidelberg Gmbh & Co. Kg
Country of Publication: DE
Dimensions (cm): 25.4 x 17.8
Weight (kg): 1.18