Formatação de string para Logica Proposicional

meu programa recebe strings com os simbolos:
Conectivos: >, *, ^, v e ¬ ;
Formulas: letras maiusculas de A a Z , [A-Z] ;
Simbolos de Pontuação: ( e ) ;

Estou com problemas para separar os niveis da expressão:
Tenho de separar os conectivos das letras e expressões entre parenteses.
quando recebo: ivH^(BC)[/i]
tenho de separar:
i
v
H
^
(B
C)[/i]

:?



public class Separador {

	
	public void separador(String s){

		for(int i = 0; i < s.length(); i++){

		   if(s.charAt(i)=='('){

		         for(;s.charAt(i)!=')';i++){
		            System.out.print(s.charAt(i));
		         }
		      System.out.println(s.charAt(i));

		   }
		   else      
		      System.out.println(s.charAt(i));

		}
	}
	
	public static void main(String[] args) {
		new Separador().separador("(A>B)vH^(B*C)");
	}
}

Tem problema quando existem expressões com mais de dois níveis…

teste por exemplo: ((G>T)>B)vH^(BC)
a saida deveria ser:
((G>T)>B)
v
H
^
(B
C)

tenta:

public class Separador {

	
	public void separador(String s){

		int countParenteses = 0;
		for(int i = 0; i < s.length(); i++){

		   if(s.charAt(i)=='('){
			   do{
				   if(s.charAt(i)=='(')
					   ++countParenteses;
				   else if(s.charAt(i)==')')
					   --countParenteses;
				   System.out.print(s.charAt(i));
				   i++;
			   }while(countParenteses!=0);
			   i--;
			   System.out.println();

		   }
		   else      
		      System.out.println(s.charAt(i));

		}
	}
	
	public static void main(String[] args) {
		//new Separador().separador("(A>B)vH^(B*C)");
		new Separador().separador("((G>T)>B)vH^(B*C)");
		 
	}
}

Obrigadão!