// Path: src/main/java/regexcompiler/RegexQuantifiableOperator.java
// public static class RegexPlusOperator extends RegexQuantifiableOperator {
// 
// 	public RegexPlusOperator(QuantifierType quantifierType, int index) {
// 		super(OperatorType.PLUS, quantifierType, index);
// 	}
// 		
// }
// 
// Path: src/main/java/regexcompiler/RegexQuantifiableOperator.java
// public static class RegexQuestionMarkOperator extends RegexQuantifiableOperator {
// 
// 	public RegexQuestionMarkOperator(QuantifierType quantifierType, int index) {
// 		super(OperatorType.QUESTION_MARK, quantifierType, index);
// 	}
// 		
// }
// 
// Path: src/main/java/regexcompiler/RegexQuantifiableOperator.java
// public static class RegexStarOperator extends RegexQuantifiableOperator {
// 
// 	public RegexStarOperator(QuantifierType quantifierType, int index) {
// 		super(OperatorType.STAR, quantifierType, index);
// 	}
// 		
// }


import nfa.*;
import regexcompiler.RegexQuantifiableOperator.RegexPlusOperator;
import regexcompiler.RegexQuantifiableOperator.RegexQuestionMarkOperator;
import regexcompiler.RegexQuantifiableOperator.RegexStarOperator;
package regexcompiler;


public interface NFACreator {
	
	public NFAGraph createBaseCaseEmpty();

	public NFAGraph createBaseCaseLookAround(NFAVertexND lookAroundState);
	
	public NFAGraph createBaseCaseEmptyString();
	
	public NFAGraph createBaseCaseSymbol(String symbol);
	
	public NFAGraph unionNFAs(NFAGraph m1, NFAGraph m2);
	
	public NFAGraph joinNFAs(NFAGraph m1, NFAGraph m2);
	
// Path: src/main/java/regexcompiler/RegexQuantifiableOperator.java
// public static class RegexPlusOperator extends RegexQuantifiableOperator {
// 
// 	public RegexPlusOperator(QuantifierType quantifierType, int index) {
// 		super(OperatorType.PLUS, quantifierType, index);
// 	}
// 		
// }
// 
// Path: src/main/java/regexcompiler/RegexQuantifiableOperator.java
// public static class RegexQuestionMarkOperator extends RegexQuantifiableOperator {
// 
// 	public RegexQuestionMarkOperator(QuantifierType quantifierType, int index) {
// 		super(OperatorType.QUESTION_MARK, quantifierType, index);
// 	}
// 		
// }
// 
// Path: src/main/java/regexcompiler/RegexQuantifiableOperator.java
// public static class RegexStarOperator extends RegexQuantifiableOperator {
// 
// 	public RegexStarOperator(QuantifierType quantifierType, int index) {
// 		super(OperatorType.STAR, quantifierType, index);
// 	}
// 		
// }


// Path: src/main/java/regexcompiler/NFACreator.java
import nfa.*;
import regexcompiler.RegexQuantifiableOperator.RegexPlusOperator;
import regexcompiler.RegexQuantifiableOperator.RegexQuestionMarkOperator;
import regexcompiler.RegexQuantifiableOperator.RegexStarOperator;

package regexcompiler;


public interface NFACreator {
	
	public NFAGraph createBaseCaseEmpty();

	public NFAGraph createBaseCaseLookAround(NFAVertexND lookAroundState);
	
	public NFAGraph createBaseCaseEmptyString();
	
	public NFAGraph createBaseCaseSymbol(String symbol);
	
	public NFAGraph unionNFAs(NFAGraph m1, NFAGraph m2);
	
	public NFAGraph joinNFAs(NFAGraph m1, NFAGraph m2);
	
	public NFAGraph starNFA(NFAGraph m, RegexStarOperator starOperator);