forked from regataregata/regataregata.github.io
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcy.js
More file actions
executable file
·82 lines (72 loc) · 1.95 KB
/
cy.js
File metadata and controls
executable file
·82 lines (72 loc) · 1.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
function CY() {
};
CY.outs = function (g, node) {
var result = [];
g.edges().each(function (i, edge) {
if (edge.data().source === node.id() && edge.data().target !== node.id()) {
result.push(edge);
}
});
return result.length;
};
CY.ins = function (g, node) {
var result = [];
g.edges().each(function (i, edge) {
if (edge.data().target === node.id()) {
result.push(edge);
}
});
return result.length;
};
CY.weight = function (g, node) {
return CY.ins(g, node) + CY.outs(g, node);
}
CY.toFAAR = function (cy) {
var numStates = cy.elements().nodes().length;
function newMatrix() {
var newMatrx = [];
for (var i = 0; i < numStates; i++) {
var row = [];
newMatrx.push(row);
for (var j = 0; j < numStates; j++) {
row.push(0);
};
};
return newMatrx
};
var transitions = {};
var acceptStates = [];
var startKey = 0;
var statesMap = {};
var alphabet = [];
var multiTransition;
var missingTransition;
var numTransitions = 0;
cy.elements().edges().each(function (i, edge) {
var char = edge.data().name;
if (!char) {
missingTransition = true;
};
var source = parseInt(edge.data().source);
var target = parseInt(edge.data().target);
if (!alphabet.contains(char)) {
alphabet.push(char);
};
if (!transitions[char]) {
transitions[char] = newMatrix();
};
if (transitions[char] && transitions[char][source].contains(1)) {
multiTransition = true;
};
transitions[char][source][target] = 1;
numTransitions++;
});
cy.elements().nodes().each(function (i, state) {
var accept = !!parseInt(state.data().accept);
if (accept) {
acceptStates.push(parseInt(state.id()));
};
});
missingTransition = (missingTransition || numTransitions !== alphabet.length * numStates);
return new FAAR(numStates, transitions, 0, alphabet, acceptStates, statesMap, multiTransition || missingTransition);
};