public void rollback() {
		final int mark = this.markers.pop();

		this.stream.rewind(mark);

		final Tree lastConsumedToken = this.consumedWhenMarked.pop();
		this.depth = this.depthWhenMarked.pop();
		this.limit = this.limitWhenMarked.pop();

		if (DEBUG) {
			System.out.println(this.depth + ": Rolling back to "
					+ lastConsumedToken + " at " + mark + "; depth = "
					+ this.depth + "; limit = " + this.limit);
		}

		while (!this.consumed.isEmpty()
				&& this.consumed.getLast() != lastConsumedToken) {
			Tree token = this.consumed.removeLast();
			if (DEBUG) {
				System.out.println(this.depth + ": Undoing " + token);
			}
		}

		this.limits = this.limitsWhenMarked.pop();
	}