public Production[] replacements(Production production) {
		String rhs = production.getRHS(), lhs = production.getLHS();
		if (rhs.length() == 1) {
			// Given that unit productions have been removed, this
			// must be a terminal production.
			throw new IllegalArgumentException(production
					+ " is a terminal production!");
		}
		String[] tokens = separateString(rhs);
		// Do we need to determinalize this?
		for (int i = 0; i < tokens.length; i++)
			if (grammar.isTerminal(tokens[i]))
				return determinalize(production);
		// No termianls to resolve...
		if (tokens.length <= 2)
			if (tokens.length == 2)
				throw new IllegalArgumentException(production
						+ " has two variables already!");
			else
				throw new IllegalArgumentException(production
						+ " is in bad form!");
		// Now we're all right.
		String remainder = rhs.substring(tokens[0].length());
		String left = getLeft(remainder);
		if (leftAdded)
			return new Production[] { new Production(lhs, tokens[0] + left),
					new Production(left, remainder) };
		else
			return new Production[] { new Production(lhs, tokens[0] + left) };
	}