[java] JJTraveler

Pagina: 1
Acties:

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Ik ben met JJTraveler aan het spelen (te gek trouwens), maar wat is de standaard aanpak om visitors van de ene hierarchie aan de andere mee te geven? Ik heb 3 grote hierarchieen: type, expr en stmt en die hebben ook allemaal hun eigen visitors: type-visitor,expr-visitor en stmt-visitor. Maar hoe pak ik het aan als ik over alle expressies een type-transformatie wil loslaten? Dus wat voor methodes/classes moet ik hiervoor aanmaken?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik denk niet dat iemand je vraag snapt: ik snap hem zelf geeneens (terwijl ik bekend ben met JJForester/JJTraveler)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
oeh :)

Ik wil bv een optimalisatie loslaten op een expressie, dan kan ik zeggen:

(new BottomUp(new ExprOptimizer())).visit(leukeExpressie).

Maar als ik nu dezelfde transformatie wil loslaten op alle statements(die dus expressies in zich kunnen dragen zoals bv een expressie-stmt), hoe krijg ik dit voor elkaar? Ik weet wel hoe ik het voor elkaar krijg met een normale visitor, maar niet met JJTraveler.

[ Voor 10% gewijzigd door Alarmnummer op 23-05-2003 14:59 ]


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Als de bottomup traversal voor de statements niet de expressies ingaat, kan je in de bladeren van de statement structuur gewoon de traversal doen met de expressie visitor. Als je echter een volledig bottomup traversal doet (over zowel statements als expressies), moet je de de visitors gaan combineren. JJTraveler komt dan volgens mij pas aardig tot z'n recht met bijvoorbeeld Sequence en IfThenElse.

Het is wel aardig om JJTraveler en Stratego naast elkaar te zetten:

Stratego:
code:
1
2
  bottomup(s) =
    all(bottomup(s)); s


JJTraveler:
code:
1
2
3
4
5
6
7
public class BottomUp extends Sequence {

  public BottomUp(Visitor v) {
    super(null,v);
    first = new All(this);
  }
}


Stratego:
code:
1
2
    bottomup(stm, exp) =
      ExpStm(bottomup(exp)) <+ all(bottomup(stm, exp)); stm

Deze gaat over op een bottomup traversal met expressions zodra hij bij een ExpStm belandt is. De implementatie in JJTraveler mag je zelf verzinnen, maar alle ideeen zijn hetzelfde: Choice, BottomUp, Sequence.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Dus gewoon een visit methode voor de expr bij de Stmt inbouwen?

code:
1
2
3
4
interface Stmt{
     Stmt accepts(StmtVisitor v)throws VisitFailure;
     void acceptsExprVisitor(Visitor v)throws VisitFailure;
}


En ik moet echt nog even stoeien met die combinators om ze onder de knie te krijgen.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Waarom? Je kan toch met de combinators gebruiken om Visitors samen te stellen? (Sequence bijvoorbeeld)

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Maar waar kom ik van het stmt naar de expressie(s) die in het statement staan? Dus bij CJumpStmt -> getCondtion, ExprStmt->getExpression etc.
Pagina: 1