 		// customLabel
 		case .customLabel:
 			return [
-					[
-									CharacterSet.letters.terminal(token: T._transient),
-									"_".terminal(token: T._transient),
-									].oneOf(token: T._transient, annotations: annotations.isEmpty ? [RuleAnnotation.error : RuleAnnotationValue.string("Labels must start with a letter or _")] : annotations),
-					[
-									CharacterSet.letters.terminal(token: T._transient),
-									CharacterSet.decimalDigits.terminal(token: T._transient),
-									"_".terminal(token: T._transient),
-									].oneOf(token: T._transient).repeated(min: 0, producing: T._transient),
+					CharacterSet.letters.union(CharacterSet(charactersIn: "_")).terminal(token: T._transient),
+					CharacterSet.letters.union(CharacterSet.decimalDigits).union(CharacterSet(charactersIn: "_")).terminal(token: T._transient).repeated(min: 0, producing: T._transient),
 					].sequence(token: T.customLabel, annotations: annotations.isEmpty ? [ : ] : annotations)
 		// definedLabel
 		case .definedLabel:

		// startRegex
		case .startRegex:
			return [
					T.regexDelimeter._rule([RuleAnnotation.void : RuleAnnotationValue.set]),
					"*".terminal(token: T._transient).not(producing: T._transient).lookahead(),
					"/".terminal(token: T._transient).not(producing: T._transient).lookahead(),
					].sequence(token: T.startRegex, annotations: annotations.isEmpty ? [RuleAnnotation.void : RuleAnnotationValue.set] : annotations)
		// endRegex
		case .endRegex:
			return [T.regexDelimeter._rule([RuleAnnotation.void : RuleAnnotationValue.set])].sequence(token: self)
		// regexBody
		case .regexBody:
			return [

		// moduleName
		case .moduleName:
			return [
					CharacterSet.letters.union(CharacterSet(charactersIn: "_")).terminal(token: T._transient),
					CharacterSet.letters.union(CharacterSet.decimalDigits).union(CharacterSet(charactersIn: "_")).terminal(token: T._transient).repeated(min: 0, producing: T._transient),
					].sequence(token: T.moduleName, annotations: annotations.isEmpty ? [ : ] : annotations)
		// moduleImport
		case .moduleImport:
			return [
					T.whitespace._rule([RuleAnnotation.void : RuleAnnotationValue.set]).repeated(min: 0, producing: T._transient),
					"import".terminal(token: T._transient),
					CharacterSet.whitespaces.terminal(token: T._transient).repeated(min: 1, producing: T._transient),
					T.moduleName._rule(),
					T.whitespace._rule([RuleAnnotation.void : RuleAnnotationValue.set]).repeated(min: 1, producing: T._transient),
