private Rule rule() {
		Condition condition = condition();
		consume(ARR);
		List<Update> updates = new ArrayList<Update>();
		Command must = null;
		while (true) {
			if (peekType() == MEM || peek().isMemSugar()) {
				Update update = update();
				updates.add(update);
			} else if (peek().isAction()) {
				must = action();
				if (peekType() != SEMICOLON) {
					throw new SyntaxError(peek());
				}
			} else if (peekType() == SEMICOLON) {
				break;
			} else {
				throw new SyntaxError(peek());
			}
		}
		consume(SEMICOLON);
		if (must == null) {
			if (updates.isEmpty()) {
				throw new SyntaxError(peek());
			}
			must = updates.remove(updates.size() - 1);
		}
		return new Rule(condition, updates, must);
	}