// 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;
		}

		public GroupFactor(String processedContent, GroupType groupType, int level) {
			super(ParsingPreprocessor.tokenize(processedContent, level + 1));
			this.level = level;
			this.groupType = groupType;
		}

		@Override
		public FactorType getFactorType() {
			return FactorType.GROUP;
		}

		private GroupType groupType;

		public GroupType getGroupType() {
			return groupType;
		}
		
		private String groupPrefix() {
			switch (groupType) {
			case NORMAL:
				return "";
			case NONCAPTURING:
				return "?:";
			case POSLOOKAHEAD:
				return "?=";
			case POSLOOKBEHIND:
				return "?<=";
			case NEGLOOKAHEAD:
// 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;

		}

		public GroupFactor(String processedContent, GroupType groupType, int level) {
			super(ParsingPreprocessor.tokenize(processedContent, level + 1));
			this.level = level;
			this.groupType = groupType;
		}

		@Override
		public FactorType getFactorType() {
			return FactorType.GROUP;
		}

		private GroupType groupType;

		public GroupType getGroupType() {
			return groupType;
		}
		
		private String groupPrefix() {
			switch (groupType) {
			case NORMAL:
				return "";
			case NONCAPTURING:
				return "?:";
			case POSLOOKAHEAD:
				return "?=";
			case POSLOOKBEHIND:
				return "?<=";
			case NEGLOOKAHEAD:
				return "?!";