package Zavorky;

class Zavorky{
	
	public static void zavorky(String string){
		char znak, tmp;
		charZasobnikSpoj temp=new charZasobnikSpoj();
	
	for (int i=0; i<string.length(); i++) {
		// projit postupne vsechny znaky retezce
		znak = string.charAt(i);
		
		// znak je leva zavorka, ulozit do tempu a vypsat temp
		if (znak=='{' || znak=='[' || znak=='(') {
			temp.push(znak);
			temp.prcharln();
		
		// znak je prava zavorka
		} else if (znak==')' || znak==']' || znak=='}') {
			// mame pravou zavorku, ale temp je prazdny => chyba
			if (temp.empty()) {
				System.out.println("Chyba - chybi leva zavorka k "+znak+"!");
				break;
			}
			
			// temp neni pradzny, nacist posledni polozku
			// (a zaroven ji smazat ze tempu)
			tmp = temp.pop();
			
			// posledni zavorka ze tempu neni spravna prava k nactene => chyba
			if (( znak==')' && tmp!='(' ) ||
				( znak==']' && tmp!='[' ) ||
				( znak=='}' && tmp!='{' )) {
				System.out.println("Chyba - chybi prava zavorka k "+tmp+"!");
				break;
			}
			
				// vsechny chyby byly odfiltrovany => zavorky koresponduji,
				// vypsat temp - uz s odmazanou zavorkou
			temp.prcharln();
			}
		
			if (i==string.length()-1) {
				// temp je prazdny a jsme na konci retezce => uspech
				if (temp.empty()) {
					System.out.println("OK!");
				} else {
					tmp = temp.pop();
					System.out.println("Chyba - chybi prava zavorka k "+tmp+"!");
				}
			}
		}
	}
	public static void main(String[] args) {
		//cvicne stringy
		final String data1=new String("{ [ ( a + b) * ( c - d ) + e ] / f }");
		final String data2=new String("{ [ ( a + b} * ( c - d ) + e ] / f }");
		
		//metody postvane na cvicne stringy
		zavorky(data1);
		zavorky(data2);	
	}
}