CT Converter

Der CT Converter lädt Dateien in “alter” CT-Syntax (JTransformer und frühe CTC-Versionen) und konvertiert dabei die auftretenden CTs und Prädikate in die (aktuelle CT-Darstellung). Dabei werden new_node_id(ID) Terme aus dem condition(Cond) und/oder transformation(Trans) Bereich extrahiert und in den id_creation(IDs)-Bereich verschoben:

Veraltete Syntax Aktuelle CTC Syntax
JTransformer CTs ct(H, C, T) ct(H, condition(C), id_creation(IDs), transformation(T))
“Alte” CTC CTs ct(H, condition(C), transformation(T)) ct(H, condition(C), id_creation(IDs), transformation(T))

Zusätzlich werden die Sprachelemente von JTransformer in die Darstellung des CTC überführt:

JTransformer CTC Kommentar
delete(P) del(P)
replace(P1, P2) rep(P1, P2)
new_id(ID) new_node_id(ID)
PEF PEF Falls ctc_option(remove_exists, on).
PEF exists(PEF) Falls ctc_option(remove_exists, off).

Durch die Setzen von ctc_option(remove_exists, on/off). vor dem Aufruf der Konversion, lässt sich steuern, ob PEFs durch ein exists(…) gekapselt werden oder nicht. Wenn nichts angegeben wird, findet eine Kapselung durch exists(…) statt.

Beispiel

Die CT addGetter(Class,Field,Type,Getter) in JTransformer-Darstellung lautet:

ct(addGetter(Class,Field,Type,Getter), (
    field_without_getter(Field,Class,Type,Name,Getter),
    % Identities of elements to be created:
    new_id(Method),
    new_id(Block),
    new_id(Return),
    new_id(Get)
),(
    % Create Method "Type Getter() { return F }":
    add( methodDefT(Method,Class,Getter,[],Type,[],Block) ),
    add( blockT(Block,Method,Method,[Return]) ),
    add( returnT(Return,Block,Method,Get) ),
    add( getFieldT(Get,Return,Method,null,Name,Field) ),
    add_to_class(Class,Method)
)).

Die konvertierte Darstellung für diese CT lautet:

ct(addGetter(Class,Field,Type,Getter),
  condition((
    field_without_getter(Field,Class,Type,Name,Getter)
  )),
  id_creation((
    new_node_id(Method),
    new_node_id(Block),
    new_node_id(Return),
    new_node_id(Get)
  )),
  transformation((
    add( methodDefT(Method,Class,Getter,[],Type,[],Block) ),
    add( blockT(Block,Method,Method,[Return]) ),
    add( returnT(Return,Block,Method,Get) ),
    add( getFieldT(Get,Return,Method,null,Name,Field) ),
    add_to_class(Class,Method)
  ))
).

Beachte:

  • Variablennamen bleiben vollständig erhalten.
  • Der Kommentar wird nicht automatisch übernommen!
Der CT-Konverter wurde von Daniel Morales geschrieben. Vielen Dank Daniel, für das nützliche Werkzeug!
Last modified: 2014/04/24 13:32
 
*