95 lines
4.6 KiB
Markdown
95 lines
4.6 KiB
Markdown
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.
|
|
|
|
There are, however, two catches for a newcomer trying to learn Spoofax and
|
|
Stratego for the first time:
|
|
|
|
1. All of the examples are worked in an older framework ("Stratego/XT") which
|
|
has a rather different collection of tools than the current implementation
|
|
of Spoofax in the Eclipse IDE.
|
|
1. Unlike with the Calc example language used for the explication of the
|
|
Syntax Definition Language SDF3, there does not seem to be any publicly
|
|
available repository containing the worked examples to follow along with.
|
|
|
|
This [Gitea repository](https://code.studioinfinity.org/glen/spoofax_prop) aims
|
|
to fill both gaps. 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).
|
|
|
|
This (Mkdocs-generated) documentation seeks to clarify the ways that Stratego
|
|
transformations may be run in the Spoofax/Eclipse IDE environment, serving as
|
|
a supplement/replacement for the portions of the manual that are
|
|
specific to Stratego/XT.
|
|
|
|
## 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](https://www.metaborg.org/en/latest/source/release/development.html).
|
|
I have been unable to get 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, let's begin delving into Stratego
|
|
transformations by recalling the abstract syntax of the
|
|
Spoofax Propositional Language (SPL), as defined
|
|
at the top of {! docrefs/sec4.1.md !} of the manual.
|
|
It consists of the following signature of constructors:
|
|
|
|
```stratego
|
|
{! src-gen/signatures/Spoofax-Propositional-Language-sig.str extract:
|
|
start: '(signature[\s]*)$'
|
|
stop: '^(\s*Eq\s*:.*)'
|
|
!}
|
|
```
|
|
<!-- /md -->
|
|
Continue reading in the latest released
|
|
[SPL documentation](http://studioinfinity.org/SPL)
|
|
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](http://mkdocs.org) and the `semiliterate` plug-in for MkDocs,
|
|
which is available in
|
|
[pre-release form](https://code.studioinfinity.org/glen/mkdocs-semiliterate). Then
|
|
you can execute `mkdocs build` in the top-level directory of this project.
|