Stratego/XT 0.9.5

Stratego -- Strategies for Program Transformation
Released March 26, 2004


See the installation instructions if you are not familiar with the standard installation procedure of tarballs or RPMs.

Source tar.gz

Source RPM

Redhat Linux RPM

Redhat 8.0:

Redhat 9.0:

SuSE Linux RPM

SuSE 8.2:


StrategoXT is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This software is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

Summary of Changes

  • JIRA Issue Tracking System
  • Improved documentation of tools
  • Many bug fixes
  • New hashtable strategies
  • Concise syntax for ParseUnit test-suites
  • Upgrade of the SDF language


Important: StrategoXT 0.9.5 requires more recent versions of the SDF implementation in PGEN (2.0) and SGLR. The sdf2-bundle 2.0.1 provides all required SDF packages and is available from the release page of StrategoXT 0.9.5.

Packages that require StrategoXT usually apply the USE_XT_PACKAGES macro of autoxt to add --with-x configuration flags to the configure script. This macro now also provides a --with-strategoxt flag, which is the preferred alternative to the --with-stratego-xt flag. The additional flag corresponds to the package name of StrategoXT, which is strategoxt.

JIRA Issue Tracking System

We have finally adopted an issue tracking system for StrategoXT and related projects. Arthur van Dam suggested to use JIRA, which is free (not Free) for open-source projects. Fortunately he has taken care of evaluating and installing it as well. We have just started to use the system, but it looks very promising. The user-interface is very attractive compared to Bugzilla and JIRA provides many useful overviews for developers, without having to struggle with a generic query interface.

Our JIRA installation is public and everyone can submit issues. Please report issues directly to the JIRA issue tracking system from now on. New issues reported in JIRA will be sent to the stratego-bugs mailing list for notification. However, the issue in JIRA is the preferred place too for comments. Of course you are welcome to discuss issues at the stratego-dev mailing list first.

(Arthur van Dam)


Documentation for users of StrategoXT has improved in several areas.

Rob Vermaas, who is now a scientific programmer at our institute, is working on updating the completely out-of-date README files in the distribution. Many sub-packages have already been updated, but some work remains to be done at this point.

(Rob Vermaas)

Feedback by new users inspired us to revive the Tools web and start working on a comprehensive reference for the tools in StrategoXT. The reference is still far from complete, but it is a start. Tool documentation in the tool reference should provide an introduction, explanation of the command-line arguments and usage examples. The tool reference is a Wiki, so you are all welcome to improve and extend the available documentation. The tools of GPP are already documented pretty thorough.

(Martin Bravenboer and Merijn de Jonge)

We have started to develop a central website for all information related to SDF at the program-transformation Wiki. In this case as well we were inspired by new users having problems to find documentation and pointers to relevant information. The new website is available at

(Martin Bravenboer)


The name of a module declared in a file did not really matter in the past. This was rather frustrating in the development of xDoc. From StrategoXT 0.9.5 the compiler outputs a warning message if the declared module name does not correspond with the name of the file.

StrategoXT 0.9.5 fixes several bugs and shortcomings in the user-interface of the Stratego compiler and tools of stratego-front such as parse-stratego and pp-stratego. From this release pp-stratego for example accepts an -I flag, which can be used to provide a search path for parse tables used for concrete object syntax.

(Rob Vermaas)

In StrategoXT 0.9.4 compiling programs that use term arguments resulted in loads of warnings from the C compiler. These warnings are caused by the type declarations of the term argument, which are not declared correctly in the C code produced by the Stratego compiler. This problem has been fixed in this release. The declared types of the argument are now correct for term arguments.

(Martin Bravenboer)

Stratego Standard Library

The Stratego Standard Library (SSL) in 0.9.5 features a new hashtable implementation. Hashtables used to be handled by name in the Stratego runtime, SSL, and custom Stratego code. It is now possible to pass hashtables around directly, not by a name. This feature is comparable to the Stratego Stream representation of native streams. Hashtables that are created in this way will not affect other parts of the program, unless the hashtable is passed to the code. The old table mechanism is of course still available and is still useful to implicitly pass information around. The new hashtable strategies include: new-hashtable(|initial_size, max_load), hashtable-put(|key, value), hashtable-get(|key). We are considering to lift hashtables from the API to the language level by providing syntax for constructing and accessing hashtables. The old hashtable strategies (table-get, table-put etc.) will be expressed in terms of the new strategies in the next release.

(Martin Bravenboer)

A common mistake in the SUnit unit-testing framework is forgetting a ! before an input or output term. SUnit now provides a variant of the unit-testing strategies that accept term arguments for the description, input, and expected output of a test e.g. apply-test(foo | "foo test", input, output)

(Rob Vermaas)

The SSL module term-io in the SSL features new strategies for writing ATerms to strings (write-to-string) and vice versa (read-from-string). These strategies have been added to accept ATerm values as command-line arguments, but they should be useful in general.

(Martin Bravenboer)

The SSL module list-set provides a general subset checker (set-eq, subset, subseteq). All these strategies are parameterizable with a user-defined compare/eq strategy.

(Arthur van Dam)



The pp-table-diff utility from now on fails if the output should not be used as a patch (--patch), but the existing pp-table is not complete. This is useful for signaling incompleteness of the pretty-print table during a build, especially in the buildfarm.

More information:

The pretty-print table generator ppgen has been extended to handle a wider range of SDF constructs.

(Merijn de Jonge)

Syntax Definition and Parsing

SDF related tools in StrategoXT 0.9.4 are using a rather old version of SDF, namely 2.1. There are not a lot of differences between this SDF version and the most recent one used in PGEN 2.0, but since SDF will undergo more heavy changes in the near future, it is important to be up-to-date. We are working on updating our SDF tools to support the most recent version of SDF as found in PGEN 2.0. As a first step in this direction the sdf-front package now includes both versions of SDF. In the next release we will no longer distribute an SDF syntax definition, but directly work on the definition provided in the SDF distribution.

Unfortunately some tools are still using the old syntax definition. For example pack-sdf uses the new one, but sdf-to-sig still uses the old one. This situation will be solved in the next release, where SDF 2.1 will not be used anymore, except for its syntax, signatures and pretty-printer.


ParseUnit, a tool for unit-testing syntax definitions, has been extended with a concise, concrete syntax for testsuites. The new testsuite syntax also allows partial specification of expected outcomes by using wildcards. The concrete syntax for ParseUnit testsuites does not require escaping of special characters in the test input. This makes the inputs much more readable, because special characters are in practice not special in parse testsuites.

More information:

(Martin Bravenboer)

SDF Renamed Module Generator

Syntax definitions of concrete object syntax embeddings require renamings of the sorts of the imported syntax definitions. Defining these renaming modules by hand is annoying and error-prone. The sdf-tools package of StrategoXT now features gen-renamed-sdf-module a tool that automates this task. It takes an SDF syntax definition and produces an SDF module that renames the sorts in some user-definable way, by prefixing it with the language name for example.

More information:

(Martin Bravenboer)

Download and Installation

The release page contains the source distributions, binary RPMs, and detailed instructions on how to install the distributions:

Bugs and Known Problems

Not all bugs and known problems for StrategoXT have been solved in this release, otherwise this would release 1.0 ;). See our issue tracking systems for reports about (open) bugs:

For an overview of features planned for future releases:

Please report any problems with installation or bugs in the implementation to our issue tracking system. Please check the existing issues to see if a report about the problem was already submitted.


Developments, beta tests, and bug fixes were carried out by

  • Martin Bravenboer
  • Arthur van Dam
  • Merijn de Jonge
  • Rob Vermaas

Stratego.StrategoRelease095 moved from Stratego.StrategoRelease094 on 23 Nov 2003 - 12:23 by EelcoVisser - put it back