From 4e709fa30380025603cd037e278d26f944dec56b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Antonio=20Garc=C3=ADa-Dom=C3=ADnguez?= <nyoescape@gmail.com> Date: Mon, 6 May 2019 22:34:00 +0100 Subject: [PATCH] Add models and metamodels --- docs/diagrams/BDD.png | Bin 0 -> 4482 bytes docs/diagrams/Nodes.png | Bin 0 -> 4241 bytes docs/diagrams/TT.png | Bin 0 -> 6632 bytes docs/diagrams/Tree.png | Bin 0 -> 3679 bytes metamodels/BDD.ecore | 42 +++++++++++++++++++++++++ metamodels/BDD.km3 | 50 ++++++++++++++++++++++++++++++ models/OUT.bddmodel | 51 +++++++++++++++++++++++++++++++ models/Test.bdd | 27 ++++++++++++++++ models/Test.bddmodel | 51 +++++++++++++++++++++++++++++++ models/Test.tt | 14 +++++++++ models/Test.ttmodel | 66 ++++++++++++++++++++++++++++++++++++++++ 11 files changed, 301 insertions(+) create mode 100644 docs/diagrams/BDD.png create mode 100644 docs/diagrams/Nodes.png create mode 100644 docs/diagrams/TT.png create mode 100644 docs/diagrams/Tree.png create mode 100644 metamodels/BDD.ecore create mode 100644 metamodels/BDD.km3 create mode 100644 models/OUT.bddmodel create mode 100644 models/Test.bdd create mode 100644 models/Test.bddmodel create mode 100644 models/Test.tt create mode 100644 models/Test.ttmodel diff --git a/docs/diagrams/BDD.png b/docs/diagrams/BDD.png new file mode 100644 index 0000000000000000000000000000000000000000..bc98ff284996b21e0eef2c529af0062d66cd6f3d GIT binary patch literal 4482 zcmeAS@N?(olHy`uVBq!ia0y~yV9H@&V3cQJW?*38d)oelfq_9Qz$e7@-~a#1moM+` z?#|E8KYaM`{Q2|m-@hLpA1^O2Z*Om3Uthm}|9%DrhX4QnCl+j|W?*1oED7=pW^j0R zBaMMUkj>M@F{EP7+qvH5mp#N9p0j_|e__0T!FS^nw#t(N&0AGj9vz)y$;^4fn`z-& zRbPf`%RNGCe_2d>`zfd^=k>qofu5h7%U*`=S}L?7Z~Ml+pzZJ0p5Gp#x>By5QB~%X z_)We)GZt+q>^yW#l}mcMMotWr6SQIHl8zGvY0;j1W|^nv{CvA4@P>$4;!n+-7z`XL zb=$n?<DCbg&!&aeiCKRAmuwY~nUiqnZ9?Uq6RTrx%&fdzydW=SQ>0<em;VlYpS8rx z($-a9TN|Y|JM{21F8;TEaZeAOyRnbCN^Q32;k5n-e?Kb!-t<r1^3=+nhdu3Y4{q+O zdwz!DSLgOf!<_qSo0rvA_3x>^+2yG$HQUVYN8IeYXZHFxo%KpoesbnQ$&S2jB@<fD z?rda>NdD!yAyPAEi|vPXnR&ZeKW*@JR8H}*=QPu9U+Zc+z5DGY>s>zEA}w=dnPpC1 zy!JWj@;tfe$EKf3y!`9J3-5JHd}mztZ#sJ_@w3zh{wa~qyKXjXG0!&s_5A&p$qAdi zZtR=je{a8h-!J|>&Fl3)X(n4dwoLebtgY7Q(o6M&X;U{$U2taR{6oj462kGW8&-bI zjhW{a{OrtnrHg95GmY(Ad$qCQ{qn5058iZFwwPsFtetHA`EbH!wgp!YENJ&LUT?I` zc#X-`BWAM??aAN%bIQiKiAz_inWZybSnm(vO>ECCth{gXM*aA&M?3QD-ppzKI%D63 z*b9j(wl8D6AZ@p6&3&C;_vg>u!}2<#(thvr8#$laua(~Nn=ZF!uX#)Pg^P+3@~P!* zRu;kCd#Z0{n;-k`w%}z{xwGW$nR_x-!Y)l?PrFvKETQRk+eF)?kL?cyE-3yqiBCJ@ z<-PeY%u5c;&C^P@o^0Hkl9M3ca>J)v;8Kk0O5wxDw;oEfc<Y;*lU}rJV(;6(4~1^q z+$xw?qI_e^=hy$18ErGRyzFtzY`&Ftj&ySB`>M=kf;rrulos{8^*LuUY2(j;Lta*2 ztYigZZu9N6^RRAOyUu;;#<?eFx*3_J7a3e+&bd(a^&m%d(Ds*iRnMr+zkcK1oxd`H z$I8^wr7CaeT)KX2+RxfA(ks8R@q4_rvuxjR-)wjBA1<-w`zQHdkp5$|%#%|xM<dyK zvbnG6d!e$Yj}Nbw+g`Nj&zT#~E??ErY1Q3*=2(LL(@?#4XZpL&*4b2@UOPv}-q=hh z_1qs3vvn9)tI4-FUt3KtaZh^U-l~Ir8&yswc<Y(*-_lc_{?g3)MA+)qhzLE$uNwuI zb?4;lt~u#`*eX_&vBo}ezv3C)tH+*QVn|9%zILg1N@B-MhVau@!|v@2n{StVyimus z(<bNOY>j72dt?7xz4;-qgY&g(7N6Aptly1ik01DCz<2vo@BJdjS-v?XCr->uC|2aV z{VwwNro3x+t~Qx`dp%iWoBs9q9@~R%&0V1ZV%u0Ns|;rNPUpU4@iyAF>20TV{yT27 zLr0z&{mpAMy(D$Hz)|XZn&8oAtKYDjtv{M#>2dz;wEa&5-&NF3PUxHv9dvuwwu@KQ zzcJsQa@V>0=(SIFX*(2r)3=D`hJ0g^e!F#}ey+}O+mPk5$y@(Sy!z^$`nHJsH@3gl z-Eh3bQA#KzD8uKwaI}+PWPO(8_S||$DJStInJ><1-7+~mizV|LL-eF<pPcvcuV1rf z-Vs0kZ|hs`o!shMpIR-bZqQxX;*+zxo>zOt-YEZ1&yP=g5oxsTsjb+I+u81azudTU zgh?$qdTQ5&bGO?v*0|5J35v`)`84^@)q63ulAV5QLPVpx;(2s>k4#mXxOCNxphK#r zvo_p6l;i2Tap}&fahylPE@vfq=kY6Wi)_5QW!8<Ll_?#n3m=Ag=DhSvO_(IL(RInB z8wKlPlvZboZcNQ!HFlkJpkTGaHl4spogEOC$0pWEI|^3IZSygl#M`kW>|pQxjx<fx z<imS%I9D&r`{QQfttlS8ZTF%zi7Hxm?)>P@m=>h9t>@!J(e@Pu#m}E~>{LAy<#lx0 zME7SJLLzy3bHAOwC6uO{nsi!9c4j6=mZ*l=vuOs|n!?imOuc<fOPhbb*d2Xn%~F?~ zne!(-?NC&FD3)~lu27op)5Ozql9mx1oZAI%zXR#uk1ms_bn-aTd@oh??oFXI-KB}A z1;uw}&1=Yd<@Eg3gsmWp539XuQe7}>*N3n6XLJ*<1&M95S$bOB;m5<Uh0#B4T2Hex z+22{!tb2W`b^4zL+qtG5oTjhzDa`s!R+MB;()uu=WnR;obklbhx$_t82xW~vm-KX5 zgG`?2!D-t=em1jj4_(2rO-S$KimO|sZWM(p^0BSBx<%;5CwuQFoU&&MR<msT!}`dv z;pc+wTsJIM@ryGa$%<mlSsHu)<Ds=oH!7MM_!;6%*D`Dq(tn?EHN?(r-J%a|ykR>$ zj~@#!tmy6+&AYU5YE7a0uH%z>dp|#azCOp|YKWQHxu6f?a?59V9Xl4?!DQGR<g1!I z`Jz%%Nbt@ZJF<NyE=mpwUU}n3_1jh@HpM$jk|tk~Q)-#*lf!yPU(Dd>VPCavO!vgK zD?Ub7b>8T@GPUWcUW~75(&U?+8msjAqZh{SX-N{lD&D;I#@D4Ej(XPUiZ}ZfMMoIi zNlDaxQT9>K<={38+fIQT*3-QgJ`3GV7HeGlLUrey-;142DQ!6U&Ozj?GvBsDch63e z`zLZyw86LR|H1;bpbet+2fCWpI_x-kpzXs0w&$)~|Ie#4OFPY+7$;nuuFNQX%sEpf z=gvBh18TcJZ_wOxbxTc-hQ8LtHoi{j=H?#Xvipi!bL^8|-Y8&8e8BtRv5e;Qc`TyR zmnO&`DV(_I*ycq^lkXPa5M3v~DJ3W3@o5A0)5X13{{Bs!ysLMtDCRkGhS%{(n_1bm zH!~e%v?^|VaLampuK3LS=#@88%B3Hv)bE(u$y+GK^=ZwmJ9AGOZB(2lTK#T!gXfco z8wTlWUJ*tL`Bf@8E3{WG)bE&NeE8Fbh0{c2qt6xG_RY(gf8b!7^>O+7pL36dC0>+{ zwYe^?zSw+y>4JFKyZ5uc%fJ7f*wt*NbI<+LfrDzhmxt<jr*nPf+>yJ(p5@n7iA%Y? zYtlcM{rLT87w^Qo851@r>T4)6L@#QW+jg|$Q&ZgJx}Eo?bN1S0RISiuk^XjS7SjgR zXP)L&Mzv<f_Ag@IpJqAR;AZThz&86$U6|O%!?|@|qV~(3IeY8ve*O2e*&_Pux9h() zH@VejCw=;V(O!LFzmkI83pa7(ywGm!Jn(Eg*ZPMaZocK+!}$9B6aKZ_?-w|iU;nzH zw)WZPjemE&s)|=Dx%Ru4^Pt-9*;6gUUmxpUb(Ep%*V_HRme{hcy?^PT;*l%NW_7Wp zd-W$L33c+;-?TKm5i{fG^$o@rFYkZf7}+vmng8)?YK*fLZaLI!;f%<P<T0BO#HIV< z@9PzRPaZep&s-CI>FAB)&uTmOZJT=c<RkHN6Gn^HW5-u}njdhR&dvW?>Eq1`al5Xw zzqz6=ZP?%4?|Y=`VAF<1Yqn~h&BhjQ*{5E4eeD}_PT2*<oqWG?uOIrIoBDkt7w5(2 zu^TdG3+Q;<0oAD+uCh-#+k7I{>2`MITF$#!;<B?R99`L(SR8Nv@n5d9tj?wD#|q}p zu~(QcX8ZZ<%!hY-;%v-c*uHc<{o#Ah-p6+*-{Z?;zqhlovD?>!vo(>s=-NxRU7k+K zi95x&?YomDE<Afi>-VFHr?0*FedEj9%@sFTaz88ZMQ^)5Q|;Ehtm{e@{CzH^8;+#R zw#+~1Uw$+saN~_lKXfE!uXxmXWZKiO^CNN=HTmjn<JsALRBcU3(#ECEf?d9M_FYWc zxHMf~X!ZszEt%-7?Vc)Tjj6&tx}x0<IZVyI7TZjinKqt$H%V-gh~A?OojhhAZv@RU zF1*n)&Btb2itwQgov&*GG#R6nBqzON5I0*Gx<w?X)6AnPq#$wfU3u3DE$3!ybIg8_ z;CxKXxJhxJK+BTrL2@~Z7BiavpCQQeG0Y}s<-=o*z9kzTCUr|6ba<^axxe1-EGu8m zChLzsRq|MzZ{BEOm)6_1Ly*TYH6=mW@VW9N`Po0p_{?u5xf!(7l;w7Inr*a=jW1ZA zYp5)d^poSD+P<!&<HhZ^O^WmSJEnz{@!Rb`GgDbYL2h>U{d{fZ8!dlK)(G-^yb-kd zbm!Wh1nuJ-N6eP~_`YN*OLXRqKUt?N=6>Y#xbX3`j)&cIW3QxL+)r=zF?`tg)JU`V zFRM;Y>!*bbBHQjjdj=@o1i_r{dmFaReIUKi`Kx4<gwQU#{X1@Kl+KP;*>+;ePyHv4 z-URj(ncSN5b`Q@llb>Z9PL(-xJ2Mr3E55t$f->8o$G*2uFBNQYi%vPUhx41~<h65p z&gT7|EH&-3)Pn-BO26x;cS;)y$mQQ!wr@@8hMauQlv8`stL##=)st8Mey<m{S>nyP zHnBFAXIo}Hzps*{U~_N7+uxh69o)26b)x3yFXFEye4gg!aR2)C_2A}n^}0;AwwNzD z^Hy+=eO*fYwf`#a*}68@U(S;5UTC)U#2lHx+X8aybDGP)t)HjA@#xcSU_(S^UrW)- zPu~3U_4U^e|3{hr`eM=WKi4Sx*77g4IoZzK=S%m?^}X1f_1^w|S;d}BYqK9WuUB=w zU3JRl>*|ZCTJJ+HO_+8qHVNK45$HI}6Zmu6^c!K@=FYy#>Y}sltmfw{`rFTj^c{ZY zcl{z;$+;c3^BNs;zGd{Dox5(a?v}T6HP~-In^GwsJ$<E2``ONf&(BwK9d^6jc(kAw z#LJ!Do|}BiW^3Kubgkn_+3t(Ze(>iwB(`OV^o?5+GmM*rQxl{8XD+|yU$U%7W}92R z@a${f{W%V~{m%6(?_GQG{*h<5^#pHMo!aB6%@{qiH<zjZ;gicxQ_Oz8*=@JGk$;QC zT<zMWt<S3prWaWMyJut--hQR5V$J%T>b}7Er0&zX)!s_M&-T9Szy31y)HmCg_g}mY zPk&Q7_0{5Emyc%t@BT0K?Qr1yef@ubC9Q3Jv8&!ctNdKNbbS1eZHFIE&E0KoW)uIY z`*gmw(nQVA_iSIzUT%2mjJksL_GLP{Jc&0vx5n;OSMUzJamgj|v5?xfV=B#JZ3Z#^ zTVo@0%oNX-=<?hwwY^)Gx-s?gp$YRJFRakh<q5p81EjdM*SoGJXJ>nPBFFg?Mmjk* z+msnXwmcOJ_1p=S7BSO9s1?~(VQKL@gT;OGvupE3wnc1Y`@*}<k$>*9YxhOAMa=X~ zycgfM>b6j;ZrB`7hyCaLwmrY`=V8sa$;q{aG3N4R=UyJt`eGvct14THVeiAmr+=MY z^#AY8linNprtuqolbLNl=X|DhY}JQv_a^AAS@e7I>z4)R7QS0w_wilo`nwYMr5l%J z-*u=wzwu|Xd75v!6pyX!Pwv$WEZOVNpY*P;XqW2|$#zWNsx#@3oBL^*mK#3xiBm%- zSsB*EXy>#EZxi5}&He<X_w=;Dy!GtNbIZ?h-9Bq|FgBv^bxcz9gn}0n4n0f!ys%~J z6umV}2e-Zzn8qwJ{l=@+hD}`3vggV{U8aABv=Y5vneE-(a`VY&soS%6&v$-md;Hn@ zWl1ydyYHVEmH(mP%Dc(M9KUlnTOVJaQ20yxC(GW0`pL7VOeoO1JTLjQy1abc*Cu69 z?`ZjI&qS{1vYEXH`P`Rk<=i}4XT!B!B<#iyj2JN8*Xz%a9{<x;q_x)@C1U>Z-wS^A VoBgQnJO%~^22WQ%mvv4FO#mC+&inuX literal 0 HcmV?d00001 diff --git a/docs/diagrams/Nodes.png b/docs/diagrams/Nodes.png new file mode 100644 index 0000000000000000000000000000000000000000..95eae8fdadf165c28bd37c0b1752ae7dfa18136e GIT binary patch literal 4241 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 P7#KWV{an^LB{Ts51gvWT literal 0 HcmV?d00001 diff --git a/docs/diagrams/TT.png b/docs/diagrams/TT.png new file mode 100644 index 0000000000000000000000000000000000000000..e337b87899ff19f55a61f39930c5c82f7d373853 GIT binary patch literal 6632 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 NJYD@<);T3K0RUjk3Jw4O literal 0 HcmV?d00001 diff --git a/docs/diagrams/Tree.png b/docs/diagrams/Tree.png new file mode 100644 index 0000000000000000000000000000000000000000..2e1ed238507797b89575853ec035989bd5b13115 GIT binary patch literal 3679 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 UP>#cmfq{X+)78&qol`;+05tAm+5i9m literal 0 HcmV?d00001 diff --git a/metamodels/BDD.ecore b/metamodels/BDD.ecore new file mode 100644 index 0000000..69350fb --- /dev/null +++ b/metamodels/BDD.ecore @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"> + <ecore:EPackage name="PrimitiveTypes"> + <eClassifiers xsi:type="ecore:EDataType" name="String"/> + <eClassifiers xsi:type="ecore:EDataType" name="Boolean"/> + </ecore:EPackage> + <ecore:EPackage name="BDD"> + <eClassifiers xsi:type="ecore:EClass" name="BDD"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="ports" ordered="false" lowerBound="1" upperBound="-1" eType="/1/Port" containment="true" eOpposite="/1/Port/owner"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="tree" ordered="false" lowerBound="1" eType="/1/Tree" containment="true" eOpposite="/1/Tree/ownerBDD"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Port" abstract="true"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" ordered="false" unique="false" lowerBound="1" eType="/0/String"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="owner" ordered="false" lowerBound="1" eType="/1/BDD" eOpposite="/1/BDD/ports"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="InputPort" eSuperTypes="/1/Port"> + <eStructuralFeatures xsi:type="ecore:EReference" name="subtrees" ordered="false" upperBound="-1" eType="/1/Subtree" eOpposite="/1/Subtree/port"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="OutputPort" eSuperTypes="/1/Port"> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignments" ordered="false" upperBound="-1" eType="/1/Assignment" eOpposite="/1/Assignment/port"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Tree" abstract="true"> + <eStructuralFeatures xsi:type="ecore:EReference" name="ownerBDD" ordered="false" eType="/1/BDD" eOpposite="/1/BDD/tree"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="ownerSubtreeForZero" ordered="false" eType="/1/Subtree" eOpposite="/1/Subtree/treeForZero"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="ownerSubtreeForOne" ordered="false" eType="/1/Subtree" eOpposite="/1/Subtree/treeForOne"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Leaf" eSuperTypes="/1/Tree"> + <eStructuralFeatures xsi:type="ecore:EReference" name="assignments" ordered="false" lowerBound="1" upperBound="-1" eType="/1/Assignment" containment="true" eOpposite="/1/Assignment/owner"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Assignment"> + <eStructuralFeatures xsi:type="ecore:EAttribute" name="value" ordered="false" unique="false" lowerBound="1" eType="/0/Boolean"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="port" ordered="false" lowerBound="1" eType="/1/OutputPort" eOpposite="/1/OutputPort/assignments"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="owner" ordered="false" lowerBound="1" eType="/1/Leaf" eOpposite="/1/Leaf/assignments"/> + </eClassifiers> + <eClassifiers xsi:type="ecore:EClass" name="Subtree" eSuperTypes="/1/Tree"> + <eStructuralFeatures xsi:type="ecore:EReference" name="port" ordered="false" lowerBound="1" eType="/1/InputPort" eOpposite="/1/InputPort/subtrees"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="treeForZero" ordered="false" lowerBound="1" eType="/1/Tree" containment="true" eOpposite="/1/Tree/ownerSubtreeForZero"/> + <eStructuralFeatures xsi:type="ecore:EReference" name="treeForOne" ordered="false" lowerBound="1" eType="/1/Tree" containment="true" eOpposite="/1/Tree/ownerSubtreeForOne"/> + </eClassifiers> + </ecore:EPackage> +</xmi:XMI> diff --git a/metamodels/BDD.km3 b/metamodels/BDD.km3 new file mode 100644 index 0000000..1f75c42 --- /dev/null +++ b/metamodels/BDD.km3 @@ -0,0 +1,50 @@ + + +package BDD { + + class BDD { + attribute name : String; + reference ports[1-*] container : Port oppositeOf owner; + reference tree container : Tree oppositeOf ownerBDD; + } + + abstract class Port { + attribute name : String; + reference owner : BDD oppositeOf ports; + } + + class InputPort extends Port { + reference subtrees[*] : Subtree oppositeOf port; + } + + class OutputPort extends Port { + reference assignments[*] : Assignment oppositeOf port; + } + + abstract class Tree { + reference ownerBDD[0-1] : BDD oppositeOf tree; + reference ownerSubtreeForZero[0-1] : Subtree oppositeOf treeForZero; + reference ownerSubtreeForOne[0-1] : Subtree oppositeOf treeForOne; + } + + class Leaf extends Tree { + reference assignments[1-*] container : Assignment oppositeOf owner; + } + + class Assignment { + attribute value : Boolean; + reference port : OutputPort oppositeOf assignments; + reference owner : Leaf oppositeOf assignments; + } + + class Subtree extends Tree { + reference port : InputPort oppositeOf subtrees; + reference treeForZero container : Tree oppositeOf ownerSubtreeForZero; + reference treeForOne container : Tree oppositeOf ownerSubtreeForOne; + } +} + +package PrimitiveTypes { + datatype String; + datatype Boolean; +} diff --git a/models/OUT.bddmodel b/models/OUT.bddmodel new file mode 100644 index 0000000..2631942 --- /dev/null +++ b/models/OUT.bddmodel @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<BDD xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="BDD" name="Test"> + <ports xsi:type="InputPort" name="a" subtrees="//@tree"/> + <ports xsi:type="InputPort" name="b" subtrees="//@tree/@treeForOne/@treeForZero //@tree/@treeForZero"/> + <ports xsi:type="InputPort" name="c" subtrees="//@tree/@treeForOne/@treeForZero/@treeForOne //@tree/@treeForZero/@treeForOne //@tree/@treeForOne/@treeForZero/@treeForZero"/> + <ports xsi:type="InputPort" name="d" subtrees="//@tree/@treeForOne //@tree/@treeForZero/@treeForOne/@treeForZero"/> + <ports xsi:type="OutputPort" name="s" assignments="//@tree/@treeForZero/@treeForZero/@assignments.0 //@tree/@treeForZero/@treeForOne/@treeForZero/@treeForOne/@assignments.0 //@tree/@treeForZero/@treeForOne/@treeForZero/@treeForZero/@assignments.0 //@tree/@treeForOne/@treeForZero/@treeForOne/@treeForZero/@assignments.0 //@tree/@treeForZero/@treeForOne/@treeForOne/@assignments.0 //@tree/@treeForOne/@treeForZero/@treeForOne/@treeForOne/@assignments.0 //@tree/@treeForOne/@treeForZero/@treeForZero/@treeForZero/@assignments.0 //@tree/@treeForOne/@treeForOne/@assignments.0 //@tree/@treeForOne/@treeForZero/@treeForZero/@treeForOne/@assignments.0"/> + <tree xsi:type="Subtree" port="//@ports.0"> + <treeForZero xsi:type="Subtree" port="//@ports.1"> + <treeForZero xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForZero> + <treeForOne xsi:type="Subtree" port="//@ports.2"> + <treeForZero xsi:type="Subtree" port="//@ports.3"> + <treeForZero xsi:type="Leaf"> + <assignments value="true" port="//@ports.4"/> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForOne> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForOne> + </treeForOne> + </treeForZero> + <treeForOne xsi:type="Subtree" port="//@ports.3"> + <treeForZero xsi:type="Subtree" port="//@ports.1"> + <treeForZero xsi:type="Subtree" port="//@ports.2"> + <treeForZero xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="true" port="//@ports.4"/> + </treeForOne> + </treeForZero> + <treeForOne xsi:type="Subtree" port="//@ports.2"> + <treeForZero xsi:type="Leaf"> + <assignments value="true" port="//@ports.4"/> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForOne> + </treeForOne> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForOne> + </treeForOne> + </tree> +</BDD> diff --git a/models/Test.bdd b/models/Test.bdd new file mode 100644 index 0000000..65bf5dc --- /dev/null +++ b/models/Test.bdd @@ -0,0 +1,27 @@ +bdd Test (in a, in b, in c, in d, out s) { + subtree a { + F:subtree b { + F:leaf s = F + T:subtree c { + F:subtree d { + F:leaf s = T + T:leaf s = F + } + T:leaf s = F + } + } + T:subtree d { + F:subtree b { + F:subtree c { + F:leaf s = F + T:leaf s = T + } + T:subtree c { + F:leaf s = T + T:leaf s = F + } + } + T:leaf s = F + } + } +} \ No newline at end of file diff --git a/models/Test.bddmodel b/models/Test.bddmodel new file mode 100644 index 0000000..6ffe94e --- /dev/null +++ b/models/Test.bddmodel @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<BDD xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="BDD" name="Test"> + <ports xsi:type="InputPort" name="a" subtrees="//@tree"/> + <ports xsi:type="InputPort" name="b" subtrees="//@tree/@treeForOne/@treeForZero //@tree/@treeForZero"/> + <ports xsi:type="InputPort" name="c" subtrees="//@tree/@treeForOne/@treeForZero/@treeForOne //@tree/@treeForZero/@treeForOne //@tree/@treeForOne/@treeForZero/@treeForZero"/> + <ports xsi:type="InputPort" name="d" subtrees="//@tree/@treeForOne //@tree/@treeForZero/@treeForOne/@treeForZero"/> + <ports xsi:type="OutputPort" name="s" assignments="//@tree/@treeForOne/@treeForOne/@assignments.0 //@tree/@treeForOne/@treeForZero/@treeForZero/@treeForZero/@assignments.0 //@tree/@treeForOne/@treeForZero/@treeForZero/@treeForOne/@assignments.0 //@tree/@treeForZero/@treeForOne/@treeForOne/@assignments.0 //@tree/@treeForOne/@treeForZero/@treeForOne/@treeForOne/@assignments.0 //@tree/@treeForZero/@treeForOne/@treeForZero/@treeForZero/@assignments.0 //@tree/@treeForZero/@treeForZero/@assignments.0 //@tree/@treeForZero/@treeForOne/@treeForZero/@treeForOne/@assignments.0 //@tree/@treeForOne/@treeForZero/@treeForOne/@treeForZero/@assignments.0"/> + <tree xsi:type="Subtree" port="//@ports.0"> + <treeForZero xsi:type="Subtree" port="//@ports.1"> + <treeForZero xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForZero> + <treeForOne xsi:type="Subtree" port="//@ports.2"> + <treeForZero xsi:type="Subtree" port="//@ports.3"> + <treeForZero xsi:type="Leaf"> + <assignments value="true" port="//@ports.4"/> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForOne> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForOne> + </treeForOne> + </treeForZero> + <treeForOne xsi:type="Subtree" port="//@ports.3"> + <treeForZero xsi:type="Subtree" port="//@ports.1"> + <treeForZero xsi:type="Subtree" port="//@ports.2"> + <treeForZero xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="true" port="//@ports.4"/> + </treeForOne> + </treeForZero> + <treeForOne xsi:type="Subtree" port="//@ports.2"> + <treeForZero xsi:type="Leaf"> + <assignments value="true" port="//@ports.4"/> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForOne> + </treeForOne> + </treeForZero> + <treeForOne xsi:type="Leaf"> + <assignments value="false" port="//@ports.4"/> + </treeForOne> + </treeForOne> + </tree> +</BDD> diff --git a/models/Test.tt b/models/Test.tt new file mode 100644 index 0000000..5dc021b --- /dev/null +++ b/models/Test.tt @@ -0,0 +1,14 @@ + +truth table Test (in a, in b, in c, in d, out s) +{ + {a=F, b=F, s=F} + {a=F, b=T, c=F, d=F, s=T} + {a=F, b=T, c=F, d=T, s=F} + {a=F, b=T, c=T, s=F} + {a=T, b=F, c=F, d=F, s=F} + {a=T, b=F, c=T, d=F, s=T} + {a=T, d=T, s=F} + {a=T, b=T, c=F, d=F, s=T} + {a=T, b=T, c=T, d=F, s=F} +} + diff --git a/models/Test.ttmodel b/models/Test.ttmodel new file mode 100644 index 0000000..9f3da5e --- /dev/null +++ b/models/Test.ttmodel @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="ISO-8859-1"?> +<TruthTable xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="TT" location="2:1-13:2" name="Test"> + <ports xsi:type="InputPort" location="2:19-2:23" name="a" cells="//@rows.0/@cells.0 //@rows.1/@cells.0 //@rows.2/@cells.0 //@rows.3/@cells.0 //@rows.4/@cells.0 //@rows.5/@cells.0 //@rows.6/@cells.0 //@rows.7/@cells.0 //@rows.8/@cells.0"/> + <ports xsi:type="InputPort" location="2:25-2:29" name="b" cells="//@rows.0/@cells.1 //@rows.1/@cells.1 //@rows.2/@cells.1 //@rows.3/@cells.1 //@rows.4/@cells.1 //@rows.5/@cells.1 //@rows.7/@cells.1 //@rows.8/@cells.1"/> + <ports xsi:type="InputPort" location="2:31-2:35" name="c" cells="//@rows.1/@cells.2 //@rows.2/@cells.2 //@rows.3/@cells.2 //@rows.4/@cells.2 //@rows.5/@cells.2 //@rows.7/@cells.2 //@rows.8/@cells.2"/> + <ports xsi:type="InputPort" location="2:37-2:41" name="d" cells="//@rows.1/@cells.3 //@rows.2/@cells.3 //@rows.4/@cells.3 //@rows.5/@cells.3 //@rows.6/@cells.1 //@rows.7/@cells.3 //@rows.8/@cells.3"/> + <ports xsi:type="OutputPort" location="2:43-2:48" name="s" cells="//@rows.0/@cells.2 //@rows.1/@cells.4 //@rows.2/@cells.4 //@rows.3/@cells.3 //@rows.4/@cells.4 //@rows.5/@cells.4 //@rows.6/@cells.2 //@rows.7/@cells.4 //@rows.8/@cells.4"/> + <rows location="4:4-4:29"> + <cells location="4:5-4:8" value="false" port="//@ports.0"/> + <cells location="4:10-4:13" value="false" port="//@ports.1"/> + <cells location="4:25-4:28" value="false" port="//@ports.4"/> + </rows> + <rows location="5:4-5:29"> + <cells location="5:5-5:8" value="false" port="//@ports.0"/> + <cells location="5:10-5:13" value="true" port="//@ports.1"/> + <cells location="5:15-5:18" value="false" port="//@ports.2"/> + <cells location="5:20-5:23" value="false" port="//@ports.3"/> + <cells location="5:25-5:28" value="true" port="//@ports.4"/> + </rows> + <rows location="6:4-6:29"> + <cells location="6:5-6:8" value="false" port="//@ports.0"/> + <cells location="6:10-6:13" value="true" port="//@ports.1"/> + <cells location="6:15-6:18" value="false" port="//@ports.2"/> + <cells location="6:20-6:23" value="true" port="//@ports.3"/> + <cells location="6:25-6:28" value="false" port="//@ports.4"/> + </rows> + <rows location="7:4-7:29"> + <cells location="7:5-7:8" value="false" port="//@ports.0"/> + <cells location="7:10-7:13" value="true" port="//@ports.1"/> + <cells location="7:15-7:18" value="true" port="//@ports.2"/> + <cells location="7:25-7:28" value="false" port="//@ports.4"/> + </rows> + <rows location="8:4-8:29"> + <cells location="8:5-8:8" value="true" port="//@ports.0"/> + <cells location="8:10-8:13" value="false" port="//@ports.1"/> + <cells location="8:15-8:18" value="false" port="//@ports.2"/> + <cells location="8:20-8:23" value="false" port="//@ports.3"/> + <cells location="8:25-8:28" value="false" port="//@ports.4"/> + </rows> + <rows location="9:4-9:29"> + <cells location="9:5-9:8" value="true" port="//@ports.0"/> + <cells location="9:10-9:13" value="false" port="//@ports.1"/> + <cells location="9:15-9:18" value="true" port="//@ports.2"/> + <cells location="9:20-9:23" value="false" port="//@ports.3"/> + <cells location="9:25-9:28" value="true" port="//@ports.4"/> + </rows> + <rows location="10:4-10:29"> + <cells location="10:5-10:8" value="true" port="//@ports.0"/> + <cells location="10:10-10:13" value="true" port="//@ports.3"/> + <cells location="10:25-10:28" value="false" port="//@ports.4"/> + </rows> + <rows location="11:4-11:29"> + <cells location="11:5-11:8" value="true" port="//@ports.0"/> + <cells location="11:10-11:13" value="true" port="//@ports.1"/> + <cells location="11:15-11:18" value="false" port="//@ports.2"/> + <cells location="11:20-11:23" value="false" port="//@ports.3"/> + <cells location="11:25-11:28" value="true" port="//@ports.4"/> + </rows> + <rows location="12:4-12:29"> + <cells location="12:5-12:8" value="true" port="//@ports.0"/> + <cells location="12:10-12:13" value="true" port="//@ports.1"/> + <cells location="12:15-12:18" value="true" port="//@ports.2"/> + <cells location="12:20-12:23" value="false" port="//@ports.3"/> + <cells location="12:25-12:28" value="false" port="//@ports.4"/> + </rows> +</TruthTable> -- GitLab