 	productions.append(alternation)
 	productions.append(contentsOf: concatenation)
 	productions.append(contentsOf: expressionElement)
+	productions.append(expressionGroup)
 	productions.append(contentsOf: literal)
 	productions.append(contentsOf: string1)
 	productions.append(contentsOf: string2)

					let nonTerminalName = ruleName(from: children[0])
					return [Production(pattern: NonTerminal(name: name), production: [n(nonTerminalName)])]
					
				default:
					fatalError()
				}

	let expression = "expression" --> n("concatenation") <|> n("alternation")
	let alternation = "alternation" --> n("expression") <+> n("optional-whitespace") <+> t("|") <+> n("optional-whitespace") <+> n("concatenation")
	let concatenation = "concatenation" --> n("expression-element") <|> n("concatenation") <+> n("optional-whitespace") <+> n("expression-element")
	let expressionElement = "expression-element" --> n("literal") <|> n("rule-name-container") <|> n("expression-group")
	let expressionGroup = "expression-group" --> t("(") <+> n("optional-whitespace") <+> n("expression") <+> n("optional-whitespace") <+> t(")")
	let literal = "literal" --> t("'") <+> n("string-1") <+> t("'") <|> t("\"") <+> n("string-2") <+> t("\"") <|> n("range-literal")
	let string1 = "string-1" --> n("string-1") <+> n("string-1-char") <|> [[]]
	let string2 = "string-2" --> n("string-2") <+> n("string-2-char") <|> [[]]
