Q: Can I get Stratego/XT running on Windows?
A: We do not currently provide a pre-built binary of 0.17 on Windows at the moment. You can compile Stratego/XT on Windows using Cygwin, provided you install the necessary libraries in advance. In particular, remember to install =util-linux= in order to get =getopt= (required for =sdf2-bundle=). For the previous stable release, 0.16, we have binary releases.
Q: Can I get Stratego/XT running on OSX?
A: This is Unix! I know this! (Yes, by either installing it through Nix or compiling from sources.)
Q: What's the difference between =spinetd= and =oncetd=?
A: The spine topdown traversal applies a strategy parameter at every
aterm on a spine from the root to a leaf. The once topdown strategy
applies its strategy parameter at only a single location.
signature
constructors
A : Term -> Term
A : Term * Term -> Term
A : Term * Term * Term -> Term
A : Term * Term * Term * Term -> Term
B : Term -> Term
B : Term * Term -> Term
strategies
main = !A(0,1,B(2,3),4) ; spinetd((not(int) ; debug(!"> ") <+ fail))
Running =main= gives you this:
> A(0,1,B(2,3),4)
> B(2,3)
A(0,1,B(2,3),4)
Q: Why does =sdf2table= (SdfChecker) always complain that the Main module is not defined?
A: When you run =sdf2table= in the present (0.17) Stratego/XT, e.g.
$ sdf2table -i Expression.def -o Expression.tbl -m Expression
you will always get the error message that the Main module is undefined:
SdfChecker:error: Main module not defined
This is a known bug. Ignore it. It's been fixed upstream already, and will trickle into newer Stratego/XT releases.
Technical details: The =sdf2table= script first does a check of the grammar using =sdfchecker= before it applies the generator, =parsetablegen=. =sdfchecker= is the one emitting the error message. Since =parsetablegen= is the tool responsible for actually generating the .tbl file, it doesn't matter that =sdfchecker= is being unreasonably cranky.
If this annoys you unbearably, name your main module =Main.sdf=.
Q: Where is this "alt" stuff coming from?
A:
Don't use alternatives in your SDF, i.e. don't use productions of the
form
"foo" (A | B) "bar" -> C
Instead, write
"foo" AorB "bar" -> C
A -> AorB
B -> AorB
This is really equivalent, since the SDF normalizer transforms the first
production to
"foo" (A | B) "bar" -> C
A -> (A | B)
B -> (A | B)
However, =asfix-implode= interprets the latter to include =alt=
constructors. This is needed to cover cases such as
"foo" ("a" A | "b" B) "bar" -> C
such that the alternatives can be reconstructed (e.g. when
pretty-printing). Since the alternatives need to be named to
distinghuish them, this is better written as
"foo" AorB "bar" -> C {cons("Foo")}
"a" A -> AorB {cons("A")}
"b" B -> AorB {cons("B")}
so that you can actually control the names used.
Q: Where can I find documentation for SDF?
A: SDF lives at [[http://www.syntax-definition.org][syntax-definition.org]]
-- Main.KarlTrygveKalleberg - 30 Oct 2008