Esterel and other imperative synchronous languages offer a rich set of statements, which can be used to conveniently describe complex control behaviors in a concise, but yet precise way. In particular, the ability to arbitrarily nest all kinds of statements including loops, local declarations, sequential and parallel control, as well as all kinds of preemption statements leads to a powerful programming language. However, their orthogonal design imposes difficult problems for the modular or separate compilation that has to deal with special problems like reincarnation of locally declared variables.
In this paper, we present a compilation procedure that allows one to separately compile modules of a synchronous programming language. Our approach is based on two new achievements: First, we derived the information that is relevant for a compiler (or linker) to expand an already compiled module into another module. This information is stored in an intermediate format, which is the target of our compilation procedure and the source of the linker. Second, we describe a related compilation procedure that can handle a typical imperative synchronous language. We have implemented the approach in the upcoming version 2.0 of our xxxxxx system and illustrate its use in this paper by a small example.
| Last Update: March 02, 2009 |