Introduction of specification modules
Eli provides a library of specification modules. Each module contains a complete set of specifications that solve a single common task in language implementation. If such a task is identified in the design of an application specification, the module is simply added to the application specification and used there. Most modules solve a rather small task. They can be flexibly combined to solve more complex problems.
The first section introduces an example that is referred to in the other sections to explain the use of modules in the context of a language implementation task. The second section explains how modules are obtained from the library and are related to users' specifications. The remaining sections describe sublibraries for a certain problem class each.
The section Name Analysis Library of Name Analysis Library, is a quick reference that helps to migrate specifications using modules of previous versions of this library.
This document may be used according to different strategies: In order to become familiar with problem solving by using library modules one can start with the running example of section Running Example, and extend it as described in the subsequent chapters. One can also start with a particular problem in mind and then search the corresponding chapter for a module that could be used to solve it. The document can also be used as a reference manual for the library modules. In any case it is recommended to read the introduction of a chapter before using one of its modules.
The modules solve their task by providing specification fragments
to one or more Eli tools: Some are simply a C module, others
Most modules in the library are generic, i.e. the names used in a module can be modified by its instantiation. This facility allows to use the same module for different purposes, e.g. a counter for variables and another for procedures, or specify the element type of a generic list type implementation. Instantiations also control the combination of modules, e.g. association of properties to procedures and to variables which might have different name spaces.
This document describes the task that each module solves, its interface,
and how it can be applied in a user's specification. The descriptions
are illustrated using a running example introduced in the next section
(see Running Example).
Complete executable specifications for that running example
are available in the directories
Users are encouraged to apply this design technique of decomposition into specification modules to their application as well. The structure of complex designs and their maintainability can thus be improved. The resulting modules may be reused in other applications. The techniques needed to instantiate user developed modules are described in Instantiation and Use of Modules.
This library will be extended by adding further modules that solve common tasks. Hence, users are encouraged to contact their Eli distributor if a module for a task that might be of general interest is missing, or if a solution for such a task can be contributed.