Zašto ne bi proveravao validnost formuje tokom građenja steka?
Otvaranje zagrade bi bilo dodavanje novog elementa na stek. U slučaju da zagrada koju treba dodati ima manji prioritet od one na vrhu steka (npr.
'{' ima manji prioritet od
'[' itd.), prijavljuje se odgovarajuća greška.
Zatvaranje zagrade je skidanje elementa sa steka. Ako je stek u ovom momentu prazan, radi se zatvaranju zagrade koja nije prethodno otvorena. Ukoliko zatvarajuća zagrada ne odgovara onoj koja se nalazi na vrhu steka (npr. zagradi
'(' odgovara samo zagrada
')' dok druge dve ne), radi se ili o prevremenom ili o suvišnom zatvaranju zagrade.
Dovoljno je da napraviš jednu
bool varijablu koja će na startu provere biti
true a prilikom kršenja bilo kog od pravila biti postavljena na
false. Ako je po završetku obrade ulaza zajedno ta varijabla
true a stek prazan, formula je validna. Evo i jedne implementacije koja radi malo više od traženog, jer se preko dva niza,
opening i
closing, mogu definisati simboli koji predstavljaju zagrade (a može ih biti i više od 3) a i prioritet među njima. Sa pojednostavljenjima možeš dobiti brži kod koji radi upravo ono što tebi treba. Komentari bi trebali biti od pomoći.
Ipak se ++uje.