private String[][][] readTransitionGroups(int groupSize, int idPosition,
			int numStates, BufferedReader reader) throws IOException {
		String[][][] groups = new String[numStates][][];
		for (int s = 0; s < numStates; s++) {
			ParseException p = new ParseException("Transition line " + (s + 1)
					+ " badly formatted.");
			String[] tokens = reader.readLine().split("\\s+");
			if ((tokens.length % groupSize) != 1
					|| !tokens[tokens.length - 1].equals("EOL"))
				throw p;
			groups[s] = new String[tokens.length / groupSize][];
			for (int g = 0; g < groups[s].length; g++) {
				groups[s][g] = new String[groupSize];
				for (int i = 0; i < groupSize; i++)
					groups[s][g][i] = tokens[groupSize * g + i];
				try {
					int i = Integer.parseInt(groups[s][g][idPosition]);
					if (i < 1 || i > numStates)
						throw p;
				} catch (NumberFormatException e) {
					throw p;
				}
			}
		}
		return groups;
	}