Mitchell Wand, Riccardo Pucella, Alan Bawden
Date of Award
Doctor of Philosophy
Department or Academic Unit
College of Computer and Information Science. Department of Computer Science.
computer science, language design, language theory, macros, metaprogramming, semantics, syntax
Programming languages (Electronic computers) - Semantics, Programming languages (Electronic computers) - Syntax
Programming Languages and Compilers
Designing custom notations is essential to designing advanced systems. Although an electrical engineer could write an English description of a circuit board, explaining which components were used and how each was connected, it is not very effective for him to do so; he would do much better to draw a circuit diagram. This not only streamlines the process of circuit architecture, allowing commonly-used design idioms to be expressed concisely, but it also allows a reasoning engine, such as an automated design tool or the electrical engineer himself, to reason about the circuit, identifying redundancies, determine its behavior and find potential problem points.
In programming, the custom notations we use are programming languages. Languages can target a specific computer architecture, can be intended for general-purpose programming, or can be tailored to a particular problem domain. The pre-testing reasoning power of the language is expressed as its static semantics, and are of vital importance in efficient compilation and in preventing bugs.
I have constructed a design framework that allows a language designer to: * * associate rich static semantics with this notation, design a custom notation for a particular domain, * provide a realization of this notation by translating programs written in it into a ``lower-level'' language, and * link the static semantics of the custom notation with those of the lower-level language. The framework allows this by providing a macro system with two major features: * syntax is represented as a tree of objects with classes, and * methods are dispatched on these objects through a system called lazy delegation.
The thesis of this work is: Object-oriented abstract syntax and lazy delegation allow language designers to build custom notations with rich static semantics, and to link these semantics with those of lower-level languages.
Fisher, David, "Static semantics for syntax objects" (2010). Computer Science Dissertations. Paper 13. http://hdl.handle.net/2047/d20000910
Click button above to open, or right-click to save.