private static void parseSplit(StreamTokenizer st, Split parent)
			throws Exception {
		int token;
		while ((token = st.nextToken()) != StreamTokenizer.TT_EOF) {
			if (token == ')') {
				break;
			} else if (token == StreamTokenizer.TT_WORD) {
				if (st.sval.equalsIgnoreCase("WEIGHT")) {
					parseAttribute(st.sval, st, parent);
				} else {
					addSplitChild(parent, new Leaf(st.sval));
				}
			} else if (token == '(') {
				if ((token = st.nextToken()) != StreamTokenizer.TT_WORD) {
					throwParseException(st, "invalid node type");
				}
				String nodeType = st.sval.toUpperCase();
				if (nodeType.equals("LEAF")) {
					parseLeaf(st, parent);
				} else if (nodeType.equals("ROW") || nodeType.equals("COLUMN")) {
					Split split = new Split();
					split.setRowLayout(nodeType.equals("ROW"));
					addSplitChild(parent, split);
					parseSplit(st, split);
				} else {
					throwParseException(st, "unrecognized node type '"
							+ nodeType + "'");
				}
			}
		}
	}