Examples from Spoofax "Stratego Tutorial/Reference" manual, worked in Spoofax Eclipse IDE. http://studioinfinity.org/SPL
Go to file
2021-02-03 16:24:47 -08:00
.mvn chore: Try updating Spoofax version 2021-01-14 08:16:08 -08:00
docrefs docs: Update to reflect pending changes in the Spoofax Tutorial/Reference 2021-02-03 16:24:47 -08:00
editor doc: document running strategies with the Sunshine jar 2021-01-19 18:34:00 -08:00
src/main/strategies/spoofax_prop/strategies init: Spoofax language project as generated 2020-12-15 00:24:59 -08:00
syntax docs: Update to reflect pending changes in the Spoofax Tutorial/Reference 2021-02-03 16:24:47 -08:00
test docs: Update to reflect pending changes in the Spoofax Tutorial/Reference 2021-02-03 16:24:47 -08:00
trans docs: Update to reflect pending changes in the Spoofax Tutorial/Reference 2021-02-03 16:24:47 -08:00
.gitignore fix: Get repository working again 2021-01-14 10:19:35 -08:00
metaborg.yaml init: Spoofax language project as generated 2020-12-15 00:24:59 -08:00
mkdocs.yml docs: Update to reflect pending changes in the Spoofax Tutorial/Reference 2021-02-03 16:24:47 -08:00
pom.xml chore: Try updating Spoofax version 2021-01-14 08:16:08 -08:00
prop.spl chore: Try updating Spoofax version 2021-01-14 08:16:08 -08:00
README.md docs: Update to reflect pending changes in the Spoofax Tutorial/Reference 2021-02-03 16:24:47 -08:00

Title: The Spoofax Propositional Language

Stratego Transformations in the Spoofax Eclipse IDE

The Stratego Tutorial/Reference {! docrefs/manual.md !} in the official Spoofax documentation presents a comprehensive overview of the Stratego approach to abstract syntax tree (AST) transformations. It employs a running example of an abstract syntax intended to represent classical Propositional Logic, which we will dub here the "Spoofax Propositional Language." The manual introduces the concepts of rules and strategies for applying them, and then shows how both of those facilities can be created from more primitive operations of term matching and replacement. Every step of the way is illustrated with actual, working Stratego programs.

This Gitea repository provides a working implementation of most of the examples in the manual. It can be cloned as an Eclipse project (note the git root is at the project level rather than in the directory above the project, as may be more common; in other words, this repository should be cloned within an existing Eclipse workspace, rather than as the workspace itself). Within that project, all of the examples from the Stratego Tutorial manual that employ the propositional language (see below), starting from Section 4 on, can be executed directly. This repository does not attempt to implement the portion of examples dealing with an arithmetical/imperative language (except in a couple of isolated instances in which the relevant phenomenon is recast in the propositional language).

Preliminaries

I recommend working with a complete pre-built Eclipse installation of Spoofax as provided by the Spoofax project, for example one that you can download from their development release page. Sometimes I have had difficulty getting the examples in this repository working starting from plain Eclipse and installing Spoofax in it using the Spoofax update site.

If at any point in using the examples things appear to stop working, and especially if the Spoofax menu item disappears or the Spoofax menu turns into a thin white rectangle with no items to select, try the following:

  • Build the project and try again.
  • Clean the workspace, and when it is done, build the project again and try again.
  • Right click on the project, select Maven > Update Project, make sure everything is checked except "Offline" and "Force update of Snapshots/Releases", and then click "OK". When it is done, clean the workspace, then build the project and try again.
  • If that still hasn't done it, restart (the Spoofax version of!) Eclipse and clean the workspace, then build the project and try again.

Running with a version of Spoofax later than 2.5.13 (I was using a 2.6.0 development snapshot), the Spoofax menu would always come back into proper operation at some point in the above process.

Abstract syntax

With the preliminaries out of the way, note that the examples in the Stratego manual deal exclusively with Abstract Syntax Trees (ASTs). The trees used are primarily for a language concerning propositional logic, which we dub the Spoofax Propositional Language (SPL). It is defined at the top of {! docrefs/sec4.1.md !} of the manual. It consists of the following signature of constructors:

{! src-gen/signatures/Spoofax-Propositional-Language-sig.str extract:
  start: '(signature[\s]*)$'
  stop: '^(\s*Eq\s*:.*)'
!}

Continue reading in the latest released SPL documentation to see how to define and run Stratego transformations on ASTs of this language.

Building the documentation

In order to build the documentation from a clone of this repository, you must install MkDocs and the semiliterate plug-in for MkDocs, which is available in pre-release form. Then you can execute mkdocs build in the top-level directory of this project.