Już wiem, gdzie jest błąd, ale nie wiem do końca jak go naprawić:
function naONP(tokeny) {
var dzialania = [];
var wyjscie = [];
var dodajOper = function (oper) {
if (dzialania.length == 0 || dzialania[dzialania.length - 1].prior < oper.prior)
dzialania.push(oper);
else if (dzialania.length > 0 && oper.typ !== Typ.NawiasZ) {
while (dzialania.length > 0 && dzialania[dzialania.length - 1].prior >= oper.prior)
wyjscie.push(dzialania.pop());
dzialania.push(oper);
}
else if (dzialania.length > 0 && oper.typ === Typ.NawiasZ) {
while (dzialania.length > 0 && dzialania[dzialania.length - 1].typ !== Typ.NawiasO) {
if (dzialania[dzialania.length - 1].typ == Typ.Przecinek)
continue;
wyjscie.push(dzialania.pop());
}
dzialania.pop(); // NawiasO
if (dzialania[dzialania.length - 1].typ == Typ.Funkcja)
wyjscie.push(dzialania.pop());
}
};
var dodajStalaLubZmienna = function (el) {
wyjscie.push(el);
};
for (var i = 0; i < tokeny.length; i++) {
if (tokeny[i].typ === Typ.Liczba || tokeny[i].typ === Typ.Zmienna)
dodajStalaLubZmienna(tokeny[i]);
else if (tokeny[i].typ === Typ.Operacja || tokeny[i].typ === Typ.Funkcja)
dodajOper(tokeny[i]);
}
while (dzialania.length > 0)
wyjscie.push(dzialania.pop());
return wyjscie;
}
W linii 11
, zrzucam ze stosu operatory, bez względu na to, czy był nawias otwierający czy nie.
Jak to można obejść? :/
Dodałem kod z nawiasami do fora wewnątrz funkcji generującej kod RPN ale nadal kicha