Implementation of the imperative / rule based language PROGRES

The work reported here is part of the PROGRES ( PROgrammedGraphRewriting Systems) project. PROGRES is a very high level multi paradigm language for the specification of complex structured data types and their operations. The data structures are modelled as dir cted, attributed,node andedge labelled graphs (diane graphs). The basic programming constructs of PROGRES are graph rewriting rules (productions and tests) and derived relations on nodes (paths and restrictions). These basic operations may be combined to build partly imperative, partly rule based, complex graph transformations by special control structures which regard the nondeterministic nature of graph rewriting rules. PROGRES offers its users a convenient, partly textual, partly graphical concrete syntax and a rich system of consistency checking rules for the underlying calculus of programmed diane-graph rewriting systems. This paper presents the key techniques used for the execution of PROGRES programs. We will discuss a simple approach to control flow backtracking which is done in a conventional imperative programming language by using a certain programming style. Additionally, the semantics of PROGRES demands that we are able to restore arbitrary previous graph states during backtracking. This adds a new quality to the problem of backtracking which is addressed using a nonstandard database management system and its undo / redo mechanism. We believe that the techniques presented here are not specific for the language PROGRES but are useful for the implementation of a whole new family of multiple paradigm languages.