Poprawność wyrażenia w ONP

0

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

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)

1 użytkowników online, w tym zalogowanych: 0, gości: 1