Browse Source

doc: document running strategies with the Sunshine jar

Glen Whitney 11 months ago
  1. 2
  2. 53


@ -5,4 +5,4 @@ menus
action: "prop-dnf" = do-dnf
action: "prop-dnf3" = do-dnf3
action: "prop-cnf3" = do-cnf3
action: "both nf3" = do-dcnf
action: "both-nf3" = do-dcnf


@ -93,20 +93,51 @@ are being performed. We also introduce a strategy `dcnf` for the simultaneous
construction of DNF and CNF, as noted in the manual.
Again, there are menu items and SPT cases for the `cnf3` and `dcnf` strategies
as well. There's one caveat here, though. The test case for `dcnf`:
{! ../test/manual-suite.spt extract:
start: '^(.*test.*both.*\n?)$'
does not actually work, because of what appears to be a bug in SPT: the `to`
in the expectation line is interpreted as part of the expected AST. However,
the error message does show that the transformation is operating properly.
as well. All operate just as in the previous two sections.
We can now use this example to show yet another way to try Stratego stragies
with the Spoofax IDE implementation.
### Command-line Utilities
The Spoofax project offers an executable jar called
that allows several different Spoofax actions to be invoked from the command line.
Let's say you have downloaded it to the path `SUNSHINE_JAR`. Then you can see a
summary of the available actions with `java -jar $SUNSHINE_JAR -h`. In the
repository there's a convenience bash script `bin/spoofax-menu`:
{! ../bin/spoofax-menu extract:
- stop: --help
- start: ';;'
(You can also get a usage explanation, elided from the listing above, via
`bin/spoofax-menu -h`.)
To use this, you must have a Spoofax menu item set up to run the strategy you
want, but then you can invoke it on an arbitrary file from the command line like
spoofax_prop> export SUNSHINE_JAR=~/software/org.metaborg.sunshine2-2.6.0-20210119.175231-1.jar
spoofax_prop> export ECLIPSE_INSTALL=~/software/spoofax
spoofax_prop> export SPOOFAX_PROJECT=~/code/neweclipse/spoofax_prop
spoofax_prop> bin/spoofax-menu syntax/examples/sec5.1.2_test1.spl both-nf3
( Or(
And(Not(Atom("r")), Atom("p"))
, And(And(Atom("p"), Atom("q")), Atom("p"))
, And(
Or(Not(Atom("r")), Atom("p"))
, Or(Not(Atom("r")), Atom("q"))
, Atom("p")
In our case, the Sunshine jar doesn't really give us any new capabilities, and
the ESV menu items still have to be set up, but it could make running examples
more convenient for you.