Stratego Syntax

Stratego -- Strategies for Program Transformation
The syntax of StrategoLanguage used to be defined by a LEX/YACC grammar. In order to make maintenance and extension of the syntax definition easier it is desirable to migrate the definition to SDF2.

See FromStrategoInYaccToStrategoInSDF for a description of the derivation process.

-- EelcoVisser - 27 Oct 2001


XT release 0.9 contains the syntax definition corresponding to StrategoRelease062. This does not yet incorporate the extension with TermWrap and TermProject syntax.

-- EelcoVisser - 09 Dec 2001


There is a nameclash in Stratego.def/r/pp: the strategy some(s) and the constructor for Option(a), Some(a), have the same constructor: 'Some'. This causes another pretty printing problem.

-- Hedzer Westra


Ik probeer de stratego grammatica uit GB te gebruiken maar stuit op een probleem:

sglr: error in /opt/xt-0.9/share/ssl/list-set.r, line 133, col 17: character `|' unexpected.

het betreft hier de paal (|) constructie in onderstaande strategie:

  collect-all(s) =
    rec x(![<s> | <crush(![],union,x)>]
          <+ crush(![],union,x))

De grammatica zegt:

"[" {Strategy ","}* "|" Strategy "]" -> Strategy {cons("ListCong")}

"<" Strategy ">" Term -> Strategy {cons("BA")}
"<" Strategy ">" -> StrategyAngle {cons("AngleStrat")}
"<" Strategy ">" Term -> Term {cons("App")}

Kortom, <s> is een StrategyAngle maar StrategyAngle komt verder nergens in de grammatica voor.

Hoe zullen we dit oplossen?

-- MerijnDeJonge - 21 Dec 2001


Dit is een uitbreiding van de syntax die in 0.6.3 is ingevoerd (zie TermProject en TermWrap op de wiki). De syntax in gb gaat over 0.6.2 en moet dus uitgebreid worden tot 0.6.3. Ik zal proberen een dezer dagen die uitbreiding te maken en aan jou opsturen (ik kan niet bij de CVS).

Als je tools aan het testen bent kan je ook nog even de oude (0.6.2) versie van de bibliotheek gebruiken.

-- EelcoVisser - 21 Dec 2001


Aha, ik begrijp het.

Nog een probleem: parseren van module list-set.r van stratego-0.6.1 levert ambiguiteit op in inderstaande strategy:

  CollectSplit(s, splitter) :
    c#(as) -> (t, <union> (ys, <unions> xs))
    where <list(s); unzip> as => (bs, xs);
          <splitter> c#(bs) => (t, ys)

amb([
ExplodeCong(BA(CallNoArgs(SVar("splitter")),Inj(Var("c"))),ParenStrat(CallNoArgs(SVar("bs")))),
BA(CallNoArgs(SVar("splitter")),Explode(Inj(Var("c")),Inj(Var("bs"))))
])

Nog een probleem: De pgen/sglr combinatie die wij in XT bundelen bevat een bug: voor alternatieven wordt de constructor "pair" (i.p.v. "alt") gebruikt. Omdat jij in he stratego syntax gebruik maakt van alternativen, is de bijberende parseboom en AST incorrect.

Groet,

-- MerijnDeJonge - 21 Dec 2001

These problems have been solved in the stratego-0.7 version in the GrammarBase. In addition other new constructs such as GlobalChoice? and GuardedLeftChoice have been added. The desugaring has been adapted to FixedLengthTuples.

-- EelcoVisser - 03 Feb 2002


CategoryDone? | ToDo

Stratego.StrategoSyntax moved from Stratego.SyntaxOfStratego on 08 Dec 2001 - 16:13 by EelcoVisser - put it back