 					[
 									"(".terminal(token: T._transient),
 									T.literal._rule([RuleAnnotation.error : RuleAnnotationValue.string("A value must be specified or the () omitted")]),
-									")".terminal(token: T._transient),
+									")".terminal(token: T._transient, annotations: [RuleAnnotation.error : RuleAnnotationValue.string("Missing ')'")]),
 									].sequence(token: T._transient).optional(producing: T._transient),
 					].sequence(token: T.annotation, annotations: annotations.isEmpty ? [ : ] : annotations)
 		// annotations

	// Convenience alias
	private typealias T = STLR

	case _transient = -1, `singleLineComment`, `multilineComment`, `comment`, `whitespace`, `ows`, `quantifier`, `negated`, `transient`, `lookahead`, `stringQuote`, `escapedCharacters`, `escapedCharacter`, `stringCharacter`, `terminalBody`, `stringBody`, `string`, `terminalString`, `characterSetName`, `characterSet`, `rangeOperator`, `characterRange`, `number`, `boolean`, `literal`, `annotation`, `annotations`, `customLabel`, `definedLabel`, `label`, `terminal`, `group`, `identifier`, `element`, `assignmentOperators`, `or`, `then`, `choice`, `notNewRule`, `sequence`, `expression`, `lhs`, `rule`, `moduleName`, `import`, `moduleImport`, `mark`, `grammar`

	func _rule(_ annotations: RuleAnnotations = [ : ])->Rule {
		switch self {

					].oneOf(token: T.whitespace, annotations: annotations.isEmpty ? [RuleAnnotation.void : RuleAnnotationValue.set] : annotations)
		// ows
		case .ows:
			return T.whitespace._rule([RuleAnnotation.void : RuleAnnotationValue.set]).repeated(min: 0, producing: T.ows, annotations: annotations)
		// quantifier
		case .quantifier:
			return CharacterSet(charactersIn: "*+?-").terminal(token: T.quantifier, annotations: annotations)
		// negated
		case .negated:
			return "!".terminal(token: T.negated, annotations: annotations)
