-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfollow.js
55 lines (47 loc) · 1.42 KB
/
follow.js
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
const getFirst = require('./first');
module.exports = function getFollow(rulesArray, simbol, result = []) {
rulesArray.forEach(element => {
element.forEach(item => {
if(item.includes(simbol) && simbol != element[0]) {
aux = item.split('');
index = aux.indexOf(simbol);
if(aux[index+1]) {
if(isFinal(aux[index+1])) {
if(!result.includes(aux[index+1])) {
result.push(aux[index+1]);
}
} else {
getFirst(rulesArray, aux[index+1]).forEach(element => {
if(element !== 'Ɛ') {
if(!result.includes(element)) {
result.push(element);
}
} else {
if(!result.includes('$')) {
result.push('$');
}
}
})
if(getFirst(rulesArray, aux[index+1]).join('').includes('Ɛ')) {
result.concat(getFollow(rulesArray, element[0], result))
}
}
} else {
result.concat(getFollow(rulesArray, element[0], result))
}
}
})
})
if(simbol === rulesArray[0][0]) {
if(!result.includes('$')) {
result.push('$');
}
}
return result;
}
function isFinal(key) {
if(key === key.toLowerCase()) {
return true;
}
return false;
}