public static String[] cat(String expression) {
		ArrayList se = new ArrayList(); // Subexpressions.
		int start = 0;
		int level = 0;
		for (int i = 0; i < expression.length(); i++) {
			char c = expression.charAt(i);
			if (c == ')') {
				level--;
				continue;
			}
			if (c == '(')
				level++;
			if (!(c == '(' && level == 1) && level != 0)
				continue;
			if (c == '+') {
				// Hum. That shouldn't be...
				throw new IllegalArgumentException(
						"+ encountered in cat discretization!");
			}
			if (c == '*')
				continue;
			// Not an operator, and on the first level!
			if (i == 0)
				continue;
			se.add(delambda(expression.substring(start, i)));
			start = i;
		}
		se.add(delambda(expression.substring(start)));
		return (String[]) se.toArray(new String[0]);
	}