-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.js
94 lines (65 loc) · 2.2 KB
/
app.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
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
83
84
85
86
87
88
89
90
91
92
93
const getTable = require('./predictiveTable');
// rulesArray = [
// ['S', 'cAa'], ['A', 'cB', 'B'], ['B', 'bcB', 'Ɛ']
// ]
rulesArray = [
['E', 'TL'], ['L', '+TL', 'Ɛ'], ['T', 'FG'], ['G', '*FG', 'Ɛ'], ['F', '(E)', 'i']
]
function getStack(table, entryValue, rulesArray, initialValue = 'default') {
var Stack = function(Pilha, Entrada, Acao) {
this.Pilha = Pilha;
this.Entrada = Entrada;
this.Acao = Acao;
}
if(initialValue == 'default') {
initialValue = rulesArray[0][0];
}
resultStack = [];
myStack = new Stack(initialValue+'$', entryValue, null);
var status = null;
var X, a;
while(status === null) {
console.log(myStack)
X = myStack.Pilha[0]
a = myStack.Entrada[0]
if(X == '$' && a == '$') {
myStack.Acao = 'Sentença OK';
resultStack.push(myStack);
status = 'Reconheceu a sentença'
} else if (X == a && X != '$') {
myStack.Acao = 'desempilha ' + X;
let aux = new Stack(myStack.Pilha, myStack.Entrada, myStack.Acao)
resultStack.push(aux)
let auxPilhaEquals = myStack.Pilha.replace(X, '');
myStack.Pilha = auxPilhaEquals;
let auxEntradaEquals = myStack.Entrada.replace(X, '');
myStack.Entrada = auxEntradaEquals;
myStack.Acao = undefined;
} else {
let entrada = table[0].indexOf(a);
let pilha;
table.forEach(element => {
if(element[0] == X) {
pilha = element;
}
})
if(pilha) {
myStack.Acao = pilha[entrada];
let aux = new Stack(myStack.Pilha, myStack.Entrada, myStack.Acao)
resultStack.push(aux);
if(pilha[entrada][1] != 'Ɛ') {
myStack.Pilha = myStack.Pilha.replace(X, pilha[entrada][1])
} else {
myStack.Pilha = myStack.Pilha.replace(X, '')
}
myStack.Acao = undefined;
} else {
myStack.Acao = 'ERROR';
resultStack.push(myStack);
status = 'ERROR';
}
}
}
console.table(resultStack)
}
getStack(getTable(rulesArray), '+i$', rulesArray, 'L');