private void parse(String[] tokens) throws IOException {
		buffer = new Node[tokens.length - 1];
		int idx, ftype;
		String image, type, ftag = null;
		boolean ntag = false;
		for (int i = tokens.length - 1; i > 0; i--) {
			ftype = 0;
			idx = tokens[i].lastIndexOf('/');
			if (idx < 1 || idx >= tokens[i].length() - 1)
				throw new IOException(String.format(
						"read cropus failed in line:%d ", linenum));
			image = tokens[i].substring(0, idx);
			type = tokens[i].substring(idx + 1);
			if (image.length() > 1 && image.startsWith("[")) {
				ntag = true;
				image = image.substring(1);
				ftype |= Node.STRUCT_BEGIN;
			}
			idx = type.indexOf(']');
			if (idx > 0 && idx < type.length() - 1) {
				ntag = false;
				ftype |= Node.STRUCT_END;
				ftag = type.substring(idx + 1);
				type = type.substring(0, idx);
			}
			buffer[i - 1] = new Node(image, type, ftype, ftag);
			if (ntag)
				ftag = null;
		}
	}