blob: 15f438cacf471dd457af2a6108b3084124ab27a7 [file] [log] [blame]
import 'KiamaAS.ecore#/';
import 'KiamaCS.ecore#/';
transformation KiamaRewrite_qvtp_qvtcas
{
leftCS imports kiamacs;
rightAS imports kiamaas;
entry r___root__ input leftCS output rightAS
{
var _'«NumCS»' : Set(kiamacs::NumCS) := leftCS.objectsOfKind(kiamacs::NumCS);
buffer ji_NumCS : kiamacs::NumCS := _'«NumCS»';
var _'«PlusCS»' : Set(kiamacs::PlusCS) := leftCS.objectsOfKind(kiamacs::PlusCS);
buffer ji_PlusCS : kiamacs::PlusCS := _'«PlusCS»';
var _'«TopCS»' : Set(kiamacs::TopCS) := leftCS.objectsOfKind(kiamacs::TopCS);
buffer ji_TopCS : kiamacs::TopCS := _'«TopCS»';
install m_Num_height_value_e {
lNumCS consumes ji_NumCS;
}
install m_Plus__ast {
lPlusCS consumes ji_PlusCS;
}
install m_Top__ast {
lTopCS consumes ji_TopCS;
}
install m_Node__Plus_Plus_left_right_lc {
lPlusCS consumes ji_PlusCS;
}
install m_Node__Top_node {
lTopCS consumes ji_TopCS;
}
install m_Node__depth_1 {
lPlusCS consumes ji_PlusCS;
}
install m_Node__depth {
lNumCS consumes ji_NumCS;
}
install m_Node__height_1 {
lPlusCS consumes ji_PlusCS;
}
}
map m_Num_height_value_e
{
guard:leftCS lNumCS : kiamacs::NumCS;
var value : ecore::EInt := lNumCS.value;
new:rightAS rNum : kiamaas::Num;
notify set rNum.height := 0;
set lNumCS.ast := rNum;
set rNum.value := value;
}
map m_Plus__ast
{
guard:leftCS lPlusCS : kiamacs::PlusCS;
new:rightAS rPlus : kiamaas::Plus;
set lPlusCS.ast := rPlus;
}
map m_Top__ast
{
guard:leftCS lTopCS : kiamacs::TopCS;
new:rightAS rTop : kiamaas::Top;
set lTopCS.ast := rTop;
}
map m_Node__Plus_Plus_left_right_lc
{
guard:leftCS lPlusCS : kiamacs::PlusCS;
var ast : kiamaas::Node[1] := lPlusCS.ast;
var ast3 : kiamaas::Node[1] := lPlusCS.ast;
var left : kiamacs::NodeCS := lPlusCS.left;
var right : kiamacs::NodeCS := lPlusCS.right;
var aPlus : kiamaas::Plus[1] := ast.oclAsType(kiamaas::Plus);
var ast1 : kiamaas::Node := left.ast;
var ast2 : kiamaas::Node := right.ast;
check ast3 = lPlusCS.ast;
set aPlus.left := ast1;
set aPlus.right := ast2;
}
map m_Node__Top_node
{
guard:leftCS lTopCS : kiamacs::TopCS;
var ast : kiamaas::Node[1] := lTopCS.ast;
var node : kiamacs::NodeCS[1] := lTopCS.node;
var aTop : kiamaas::Top[1] := ast.oclAsType(kiamaas::Top);
var ast1 : kiamaas::Node := node.ast;
set aTop.node := ast1;
}
map m_Node__depth_1
{
guard:leftCS lPlusCS : kiamacs::PlusCS;
var ast : kiamaas::Node[1] := lPlusCS.ast;
var aPlus : kiamaas::Plus[1] := ast.oclAsType(kiamaas::Plus);
var oclContainer : ocl::OclElement := aPlus.oclContainer;
var _'oclIsKindOf\nkiamaas::Top' : Boolean[1] := oclContainer.oclIsKindOf(kiamaas::Top);
observe kiamaas::Node::depth var _'if' : Integer[1] := if _'oclIsKindOf\nkiamaas::Top'
then 0
else oclContainer.oclAsType(kiamaas::Plus).depth + 1 endif;
notify set aPlus.depth := _'if';
}
map m_Node__depth
{
guard:leftCS lNumCS : kiamacs::NumCS;
var ast : kiamaas::Node[1] := lNumCS.ast;
var aNum : kiamaas::Num[1] := ast.oclAsType(kiamaas::Num);
var oclContainer : ocl::OclElement := aNum.oclContainer;
var _'oclIsKindOf\nkiamaas::Top' : Boolean[1] := oclContainer.oclIsKindOf(kiamaas::Top);
var _'if' : Integer[1] := if _'oclIsKindOf\nkiamaas::Top'
then 0
else oclContainer.oclAsType(kiamaas::Plus).depth + 1 endif;
set aNum.depth := _'if';
}
map m_Node__height_1
{
guard:leftCS lPlusCS : kiamacs::PlusCS;
var ast : kiamaas::Node[1] := lPlusCS.ast;
var aPlus : kiamaas::Plus[1] := ast.oclAsType(kiamaas::Plus);
var left : kiamaas::Node := aPlus.left;
var right : kiamaas::Node := aPlus.right;
observe kiamaas::Node::height var height : ecore::EIntegerObject := right.height;
observe kiamaas::Node::height var height1 : ecore::EIntegerObject := left.height;
var oclAsSet : Set(ecore::EIntegerObject) := height1.oclAsSet();
var including : Set(ecore::EIntegerObject) := oclAsSet->including(height);
var max : ecore::EIntegerObject[1] := including->max();
var _'+' : Integer[1] := max + 1;
notify set aPlus.height := _'+';
}
}