public @Override void execute() throws CommandException {
		final Module module = getModule();
		final Namespace<? extends Symbol> symbolNamespace = module.getSymbolNamespace();
		assert (symbolNamespace != null): "Module provided null namespace";
		final TokenFeed feed = getFeed();
		final DataFactory dataFactory = DataFactory.getInstance();
		final ExpressionFactory expressionFactory = ExpressionFactory.getInstance();
		try {
			feed.beginExp();
			feed.confirmBeginExp();
			final String name = feed.getAtom();
			feed.confirmStatement();
			final DVConstraints dvConstraints = dataFactory.createDVConstraints(symbolNamespace, feed);
			feed.beginExp();
			feed.confirmBeginExp();
			final List<Expression> hypotheses = new ArrayList();
			Token token = feed.getToken();
			while (token.getTokenClass() != Token.Class.END_EXP) {
				feed.putToken(token);
				hypotheses.add(expressionFactory.createExpression(module, feed));
				token = feed.getToken();
			}
			feed.confirmEndExp();
			final Expression consequent = expressionFactory.createExpression(module, feed);
			feed.endExp();
			dataFactory.createStatement(name, dvConstraints, hypotheses, consequent, symbolNamespace);
			feed.confirmEndCmd();
		} catch (ScannerException e) {
			throw new CommandException("Feed error", e);
		} catch (ConstraintException e) {
			throw new CommandException("Error scanning DV constraints", e);
		} catch (ExpressionException e) {
			throw new CommandException("Error scanning expression", e);
		} catch (NullPointerException e) {
			logger.error("Unexpected end of input");
			throw new CommandException("Unexpected end of input", e);
		} catch (DataException e) {
			try {
				feed.reject("Unable to create statement: " + e.getMessage());
			} catch (ScannerException ignored) {
				logger.error("Unable to create statement: " + e.getMessage());
			}
			throw new CommandException("Unable to create statement", e);
		}
	}