public @Override void execute() throws CommandException {
		final Module module = getModule();
		final Namespace<? extends Kind> kindNamespace = module.getKindNamespace();
		final Namespace<? extends Symbol> symbolNamespace = module.getSymbolNamespace();
		assert (kindNamespace != null): "Module provided null namespace";
		assert (symbolNamespace != null): "Module provided null namespace";
		final TokenFeed feed = getFeed();
		final DataFactory dataFactory = DataFactory.getInstance();
		try {
			feed.beginExp();
			feed.confirmBeginExp();
			final Kind kind = kindNamespace.getObjectByString(feed.getAtom());
			feed.confirmKind();
			Token token = feed.getToken();
			while (token.getTokenClass() == Token.Class.ATOM) {
				dataFactory.createVariable(token.getTokenString(), kind, symbolNamespace);
				feed.confirmVar();
				token = feed.getToken();
			}
			if (token.getTokenClass() != Token.Class.END_EXP) {
				feed.reject("Expected end of expression");
				throw new CommandException("Expected end of expression");
			}
			feed.confirmEndCmd();
		} catch (NullPointerException e) {
			logger.error("Unexpected end of input while scanning var command", e);
			throw new CommandException("Unexpected end of input", e);
		} catch (DataException e) {
			try {
				feed.reject("Data error: " + e.getMessage());
			} catch (ScannerException ignored) {
				// ignore
			}
			throw new CommandException("Data error", e);
		} catch (ScannerException e) {
			throw new CommandException("Feed error", e);
		}
	}