Stratego Syntax
Stratego -- Strategies for Program Transformation
The syntax of
StrategoLanguage used to be defined by a LEX/Transform.YetAnotherCompilerCompiler 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