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