// Path: src/main/java/preprocessor/ParsingPreprocessor.java
// public enum BoundsType {
// 	BOUNDED, UNBOUNDED, CONSTANT_REPETITION
// }
// 
// Path: src/main/java/preprocessor/ParsingPreprocessor.java
// public enum EscapeType {
// 	CHARACTER, OCTAL, UNICODE, HEX, VERBATIM, CHARACTER_PROPERTY
// }


import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import preprocessor.ParsingPreprocessor.CountClosureOperator.BoundsType;
import preprocessor.ParsingPreprocessor.EscapeFactor.EscapeType;

					if (level != 0) {
						groupBuilder.append(regexArr[i]);
					}

					escaped = false;
					i++;
				}
				String symbols = groupBuilder.toString();
				RegexToken characterClassFactor = new CharacterClassFactor(symbols);
				tokenStream.add(characterClassFactor);
				break;
			case '\\':
				i++;
				if (i < regexArr.length && regexArr[i] == 'Q') {
					i++;
					while (true) {
						if (i < regexArr.length) {
							if (regexArr[i] == '\\') {
								i++;
								if (i < regexArr.length && regexArr[i] == 'E') {
									
									break;
								} else if (i < regexArr.length) {
									
									String currentSymbol = "" + regexArr[i];
									RegexToken verbatimChar;
									
									if (canEscapeVerbatim(currentSymbol)) {
										
// Path: src/main/java/preprocessor/ParsingPreprocessor.java
// public enum BoundsType {
// 	BOUNDED, UNBOUNDED, CONSTANT_REPETITION
// }
// 
// Path: src/main/java/preprocessor/ParsingPreprocessor.java
// public enum EscapeType {
// 	CHARACTER, OCTAL, UNICODE, HEX, VERBATIM, CHARACTER_PROPERTY
// }


// Path: src/main/java/preprocessor/ParsingPreprocessor.java
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import preprocessor.ParsingPreprocessor.CountClosureOperator.BoundsType;
import preprocessor.ParsingPreprocessor.EscapeFactor.EscapeType;


					if (level != 0) {
						groupBuilder.append(regexArr[i]);
					}

					escaped = false;
					i++;
				}
				String symbols = groupBuilder.toString();
				RegexToken characterClassFactor = new CharacterClassFactor(symbols);
				tokenStream.add(characterClassFactor);
				break;
			case '\\':
				i++;
				if (i < regexArr.length && regexArr[i] == 'Q') {
					i++;
					while (true) {
						if (i < regexArr.length) {
							if (regexArr[i] == '\\') {
								i++;
								if (i < regexArr.length && regexArr[i] == 'E') {
									
									break;
								} else if (i < regexArr.length) {
									
									String currentSymbol = "" + regexArr[i];
									RegexToken verbatimChar;
									
									if (canEscapeVerbatim(currentSymbol)) {
										
										verbatimChar = new EscapeFactor("\\" + currentSymbol, EscapeType.VERBATIM);