Skip to content
Snippets Groups Projects
Commit 4e709fa3 authored by Antonio García-Domínguez's avatar Antonio García-Domínguez
Browse files

Add models and metamodels

parent 26d3bf69
No related branches found
No related tags found
No related merge requests found
docs/diagrams/BDD.png

4.38 KiB

docs/diagrams/Nodes.png

4.14 KiB

docs/diagrams/TT.png

6.48 KiB

docs/diagrams/Tree.png

3.59 KiB

<?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>
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;
}
<?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>
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
<?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>
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}
}
<?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>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment