The easiest way to set up a working Stratego/XT project is to use the Create-a-Project tool called crap
, available in the strategoxt-utils package.
Once installed, creating a new project p0
is as easy as one line:
$ crap --new-project p0
This will generate an standard GNU Autotools-based build system, including with a minimal example (src/xmpl.str
):
p0/ Makefile.am README.Developer README AUTHORS bootstrap p0.spec.in NEWS p0.pc.in configure.ac ChangeLog xmpl/ Makefile.am syn/ Makefile.am tests/ Makefile.am src/ Makefile.am xmpl.str
The project is ready to be compiled,
$ ./bootstrap $ ./configure --prefix=$HOME/apps/p0 $ make all
installed,
$ make install
and executed:
$ echo "foo" | $HOME/apps/p0/bin/xmpl Hello, World!
(The example is a transformation component using io-wrap
-- it takes a term and spits out the string "Hello, World!"
.)
Most non-trivial Stratego/XT projects rely on pre-existing libraries and tools, such as one of the many language parsers available for Stratego/XT. Using the --deps
switch, you can add the necessary lines to the configure.ac
file as well as the appropriate include switches to each Makefile
automatically:
$ crap --deps java-front,dryad --new-project p0
The above will create the project p0
with XT_USE_JAVA_FRONT
and XT_USE_DRYAD
added to your configure.ac, plus the necessary -I
, -L
and -l
flags throughout each generated Makefile
.
It is possible to list the available dependencies which are addable to your project using the --list-available-providers
switch:
$ crap --list-available-providers
This would give a list looking something like this:
dryad stratego-aterm stratego-tool-doc stratego-sglr stratego-xtc stratego-gpp stratego-lib c-tools stratego-sdf java-front stratego-rtg
Beware: The dependency/provider system will change in future versions of crap
.
crap
comes with a small (but growing) collection of syntax modules that may freely be used in your project. This might save you from a lot of boring boilerplate code when defining a new language. To add a basic definition of whitespaces and integer literals to your project, do:
$ crap --create-project p0 --syntax-modules integer-literals,whitespace
To list the available syntax modules in your version of crap
, use the --list-syntax-modules
switch:
$ crap --list-syntax-modules
It will return a list on the form:
floating-point-literals integer-literals whitespace
There is some basic support for setting up a build of XTC components using crap
, using the --xtc
switch:
$ crap --xtc --new-project p0
The above will create the following src/
directory layout and content:
src/ Makefile.am xtc/ Makefile.am xtcxmpl.str
The xtcxmpl
will be compiled against libstratego-xtc
. Upon installation, it will registered as an XTC component and placed in ${prefix}/libexec
.
Building libraries with Stratego requires a fair bit build setup. This is done automatically for you using the --library
switch:
$ crap --library --new-project p0
This will create the following src/
directory layout and content:
src/ Makefile.am lib/ Makefile.am def-libxmpl.str xmpl/ foo.str
Upon compilation, the files libxmpl.str
, libxmpl.rtree
, libxmpl.ctree
and libxmpl.so
(plus auxiliary libtool files) are generated. The are all installed into ${prefix}/share
(.ctree
, .rtree
) and ${prefix}/lib
(.so
) as is normal for Stratego libraries.
If you are developing with Spoofax, you can generate the necessary Eclipse files (.project
) as part of the project creating using the --eclipse
switch:
$ crap --eclipse --new-project p0
Source code documentation, Javadoc-style, can be generated from Stratego code using the XDoc tool. By adding the --xdoc
switch, the build system will be set up to generate source code documentation in the doc/api
directory:
$ crap --xdoc --new-project p0
This will add a doc/
directory and an appropriate Makefile
.
doc/ Makefile.am
If you have questions, please post them to the Stratego mailinglist. Bugs are best reported using our issue tracker.
-- KarlTrygveKalleberg - 23 May 2008