W jaki sposób (z wykorzystaniem stosu) można sprawdzić czy wyrażenie zapisane w ONP jest poprawne? W prosty sposób można znaleźć wartość takiego wyrażenia, ale nie mam pojęcia jak sprawdzić jego poprawność. Będę wdzięczny za rady.
0
0
dokładnie tak jak liczysz, tylko że nic nic nie liczysz. np:
2 3 +
wrzucasz 2 na stos, wrzucasz 3 na stos, zdejmujesz dwie liczby ze stosu dodajesz je wynik wrzucasz na stos, czyli było dwie liczby została jedna.
więc zamiast zdejmować dwie i wkładać jedną wystarczy że jedną zdejmiesz i już.
Poprawnie wtedy kiedy po pierwszym włożeniu liczby na stosie zawsze będzie przynajmniej jedna liczba, a na koniec zostanie dokładnie jedna.
Właściwie to nawet stosu do tego nie potrzebujesz tylko jedną liczbę - licznik zajętości hipotetycznego stosu.
0
No tak, ale niepoprawne wyrażenie mogą być też postaci 5 6 7 + (za dużo argumentów) albo 5 + 6 7 * (np. brak argumentu dla +). Jak takie coś wykrywać?
0
Dokładny pseudokod tego co mówił @_13th_Dragon:
stack_size <- 0 -- rozmiar stosu
onp -- nasze wyrażenie
for token <- onp
if is_num(token)
stack_size += 1
elif is_operator(token) and stack_size >= 2
stack_size -= 1
else
return FALSE
return (stack_size = 1)