A ti te funciona?, a mi no.
Estas cosas me matan, int n = 3^3^3 es válido y por lo que he podido ver no hay nada en Integer que acepte este formato y lo que es es peor "3*3" por ejemplo.
Para poder evaluar la expresión anterior sin usar ScriptEngine solo se me ocurre descomponerla pero podríamos acabar cortándonos la venas 
int n = Integer.parseInt("3") ^ Integer.parseInt("3") ^ Integer.parseInt("3");
lo que se podría traducir a algo parecido a
Código: Seleccionar todo
	String p(String s){
		String[] l = {};
		if(s.startsWith("-~")) l = s.split("-~");
		else l = s.split("\\^");
		Integer ret = 0;
		if(s.startsWith("-~")){
			if(l.length>2) ret = -~-~ Integer.parseInt(l[2]);
			else ret = -~ Integer.parseInt(l[1]);
		}
		else if(l.length==1) ret = Integer.parseInt(s);
		else{
			for(int i=0;i<l.length;i++){
				ret = ret ^ Integer.parseInt(l[i]);
			}
		}
		return ret.toString();
	}
que con las expresiones que nos solemos encontrar
Código: Seleccionar todo
		System.out.println("\"0^3^3\" = " + p("0^3^3")); // 0
		System.out.println("  \"-~0\" = " + p("-~0"));   // 1
		System.out.println("    \"1\" = " + p("1"));     // 1
		System.out.println("\"-~-~0\" = " + p("-~-~0")); // 2
		System.out.println("  \"-~1\" = " + p("-~1"));   // 2
		System.out.println("\"-~-~1\" = " + p("-~-~1")); // 3
		System.out.println("\"3^3^3\" = " + p("3^3^3")); // 3
		System.out.println("  \"-~3\" = " + p("-~3"));   // 4
		System.out.println("    \"4\" = " + p("4"));     // 4
nos delvolvería
Código: Seleccionar todo
"0^3^3" = 0
  "-~0" = 1
    "1" = 1
"-~-~0" = 2
  "-~1" = 2
"-~-~1" = 3
"3^3^3" = 3
  "-~3" = 4
    "4" = 4
PD: Lo que no recuerdo por que no te funciona ScriptEngine, me suena algo del foro Desarroladores