Design Principles for Machine-Description Languages
We have taken a federated approach to the design of domain-specific
languages that support automatic generation of systems software.
These languages are intended to help generate parts of software tools
that manipulate machine instructions.
This paper explains the goals and principles that have governed the
design and implementation of these languages.
The primary design goal for languages in the confederation is to
ensure that the same machine descriptions can be used to help build a
variety of different tools.
Other goals include producing useful results from partial
descriptions, providing mechanisms that build users' trust in
descriptions, and making descriptions concise and readable.
Our design and development of machine-description languages has been
guided by a dozen language-design principles.
Using examples both from our work and from others' work, we
describe and illustrate each principle.
Some of the principles are well known to the programming-language
community and have been previously described in the literature, but
many of the principles were not obvious from the
beginning and have not
been as well described in the literature.
These principles have emerged from our goals and our application
They will interest other researchers who design
machine-description languages as well as other designers of
The paper is available as
US Letter PostScript (354K),
US Letter PDF (324K),
US Letter TeX DVI (149K).