Second Stratego Users Day Program

Stratego -- Strategies for Program Transformation

Second Stratego Users Day

February 8, 2001, Universiteit Utrecht

www.stratego-language.org

Program


10:00 coffee

10:15 opening

Session 1: Language Design (chair EelcoVisser)

10:30 Towards Typeful Stratego by RalfLaemmel (CWI, VU)

11:30 Functional Stratego by EelcoDolstra (Universiteit Utrecht)

12:15 lunch

Session 2: Programming Techniques (chair Joost Visser)

13:45 Ready, Steady, Stratego. Running Stratego Specifications with StrategoScript? by EelcoVisser (Universiteit Utrecht)

14:30 break

Session 3: Tools (chair RalfLaemmel)

14:45 XT Capita Selecta by MerijnDeJonge and JoostVisser (CWI)

15:45 break

Session 4: Applications (chair MerijnDeJonge)

16:00 SDL Documentation Generation by RonaldVanHalen? (Lucent Technologies)

16:30 CobolX: Transformations for Improving COBOL Programs by HedzerWestra (Universiteit Utrecht)

17:00 CodeBoost: A Framework for Transforming C++ Programs by OttoSkroveBagge (University of Bergen, Norway)

17:30 Optimizing Pan Programs by ArneDeBruijn (Universiteit Utrecht)

18:00 closing

19:00 dinner


Abstracts


Towards Typeful Stratego

by RalfLaemmel (CWI, VU)

Stratego and the underlying system S are as yet untyped. We propose a type system which covers the essence of system S. In addition to system S, a generic traversal primitive for folding the children of a term is considered. This primitive is essential for type-changing traversal strategies. The type system w hich we propose is based on certain signature-independent generic types. We also have to introduce a few constructs which enable us to rephrase untyped Stratego programs in a typeful manner. The type system we propose is based on certain signature-independent generic types.


Functional Stratego

by EelcoDolstra (Universiteit Utrecht)

Stratego is a domain-specific language intended for the construction of program transformation systems. To that end, the language has a number of interesting features; notably, first class pattern matching and generic traversal mechanisms. The question arises whether and how such features can be implemented in functional programming languages and Haskell in particular. In a rewrite system it is essential that one can easily recover from pattern match failure, so that alternative rewrite rules can be tried. Typical functional languages do not support this very well since local pattern match failure leads to global divergence. This article shows how to solve this problem by adding a choice operator to a simple functional language. It seems that this approach is not only useful to strategic programming, but is also more powerful than previous proposals to extend Haskell's pattern matching, such as views, patterns guards, and transformational patterns. Furthermore, we discuss how the generic programming techniques can be employed to implement generic traversals.


Ready, Steady, Stratego. Running Stratego Specifications with StrategoScript?

by EelcoVisser (Universiteit Utrecht)

A key problem in the development of Stratego specifications has been the slow turn around time of the Stratego compiler. To alleviate this problem StrategoScript? provides instanteneous execution of specification through an interpreter. In this talk I present StrategoScript? by means of a couple of examples and discusses its implementation in Stratego.


XT capita selecta

by MerijnDeJonge and JoostVisser (CWI)

XT is a bundle of program-transformation tools. Stratego is part of this bundle, and is used as implementation language for many tools throughout its packages.

Giving special attention to the role of Stratego, we discuss a selection of our XT experiences. These range from the construction of meta-tools to support Stratego programming, through Stratego techniques applied in constructing some of XT's constituents, to projects where XT (including Stratego and tools programmed in Stratego) has been applied to program-transformation problems.


SDL Documentation Generation

by RonaldVanHalen? (Lucent Technologies)

Part of the operation of Lucent Technologies 5ESS telephone exchange is described using an SDL dialect (Specification and Description Language). SDL describes the behaviour using statemachines. This description can be a textual or a graphical one, but Lucent only uses the textual description. Commercial tools are not available to interpret these SDL models, because a proprietary dialect (AT&T SDL) is used. By using Stratego and the XT toolset, a tool has been created that transforms the textual SDL code into a graphical representation of a statemachine. Stratego was used to collect the statenames and transitions from the textual description. The XT tool set and a graph drawing program were used to visualize the statemachine. The resulting graph shows the transitions between the states. This makes it easier to understand the behaviour of the code, because a graphical representation of the code is given, which abstracts from the details contained in the textual format.


CobolX: Transformations for Improving COBOL Programs

by HedzerWestra (Universiteit Utrecht)

There is a huge amount of legacy COBOL-code still being used today, e.g. at bank computer systems. Manual maintenance of this code is too expensive. Therefore, it is desirable to automate all kinds of routine modifications. An important requirement in such modifications is the preservation of comments and the original layout of the program. CobolX is an environment for implementing transformations on COBOL programs. The environment is built using the Transformation Tools (XT) package, which provides tools for parsing (SDF/SGLR), transformation (Stratego) and pretty printing (GPP). Since COBOL is a complex language, it is necessary to generate all kinds of tools from the syntax definition, since hand coding would not be feasible. The XT package provides grammar tools for generating signatures and pretty-print tables from syntax definitions. These tools were adapted to support layout preservation. As a first case study, the picture scaling transformation has been implemented. Picture scaling involves propagating information about the affected variables and then scaling picture declarations and constants.


CodeBoost: A Framework for Transforming C++ Programs

by OttoSkroveBagge (University of Bergen, Norway)