 					].oneOf(token: T.terminal, annotations: annotations)
 		// group
 		case .group:
-			guard let cachedRule = STLR.leftHandRecursiveRules[self.rawValue] else {
-				// Create recursive shell
-				let recursiveRule = RecursiveRule()
-				STLR.leftHandRecursiveRules[self.rawValue] = recursiveRule
+			guard let cachedRule = T.leftHandRecursiveRules[self.rawValue] else {
+				// Create recursive shell
+				let recursiveRule = RecursiveRule()
+				T.leftHandRecursiveRules[self.rawValue] = recursiveRule
 				// Create the rule we would normally generate
 				let rule = [
 					"(".terminal(token: T._transient),
 					T.whitespace._rule([RuleAnnotation.void : RuleAnnotationValue.set]).repeated(min: 0, producing: T._transient),
 					T.expression._rule(),
 					T.whitespace._rule([RuleAnnotation.void : RuleAnnotationValue.set]).repeated(min: 0, producing: T._transient),
-					")".terminal(token: T._transient),
+					")".terminal(token: T._transient, annotations: [RuleAnnotation.error : RuleAnnotationValue.string("Expected ')'")]),
 					].sequence(token: T.group, annotations: annotations.isEmpty ? [ : ] : annotations)
 				recursiveRule.surrogateRule = rule
 				return recursiveRule

		// stringQuote
		case .stringQuote:
			return "\"".terminal(token: T.stringQuote, annotations: annotations)
		// escapedCharacters
		case .escapedCharacters:
			return [
					T.stringQuote._rule(),
					"r".terminal(token: T._transient),
					"n".terminal(token: T._transient),
					"t".terminal(token: T._transient),
					"\\".terminal(token: T._transient),
					].oneOf(token: T.escapedCharacters, annotations: annotations)
		// escapedCharacter
		case .escapedCharacter:
			return [
					"\\".terminal(token: T._transient),
					T.escapedCharacters._rule(),
					].sequence(token: T.escapedCharacter, annotations: annotations.isEmpty ? [ : ] : annotations)
		// stringCharacter
		case .stringCharacter:

			return [
								T.annotation._rule(),
								T.ows._rule(),
								].sequence(token: T._transient, annotations: annotations.isEmpty ? [ : ] : annotations).repeated(min: 1, producing: T.annotations, annotations: annotations)
		// customLabel
		case .customLabel:
			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.customLabel, annotations: annotations.isEmpty ? [ : ] : annotations)
		// definedLabel
		case .definedLabel:
