@Override
	public void validate() throws ParserException {

		if (minInstances > instanceCount) {
			throw new ParserException("Option " + getName()
					+ " must be present at least " + minInstances + " time(s)");
		}

		if (instanceCount == 0) {
			return;
		}

		// Check that mandatory arguments are present
		for (IArgument argDef : argumentList) {
			Argument arg = (Argument) argDef;
			arg.validate();
		}

		// Check that mandatory sub options are present
		for (IOption optDef : subOptions) {
			OptionParser opt = (OptionParser) optDef;
			opt.validate();
		}

		// Check that incompatible options are not present
		for (IOption optDef : incompatibleOptionList) {
			TokenParser opt = (TokenParser) optDef;
			if (opt.getInstanceCount() > 0) {
				throw new ParserException("Option " + getName()
						+ " can't be specified together with option "
						+ opt.getName());
			}
		}
	}