public Token nextToken() {
		if (!this.queuedTokens.isEmpty()) {
			return this.queuedTokens.removeFirst();
		}

		final Token token = this.tokenizer.nextToken();

		if (token == null) {
			return null;
		}

		if (token.tagCount() > 0) {
			return token;
		}

		if (isCompilerDirective(token)) {
			return this.queuedTokens.removeFirst();
		}

		if (isMicroFocusCompilerDirective(token)) {
			return this.queuedTokens.removeFirst();
		}

		if (isTitleStatement(token)) {
			return this.queuedTokens.removeFirst();
		}

		if (isCblProcessStatement(token)) {
			return this.queuedTokens.removeFirst();
		}

		return token;
	}