in Sources/_MatchingEngine/Regex/Printing/PrintAsCanonical.swift [62:113]
mutating func outputAsCanonical(_ ast: AST.Node) {
switch ast {
case let .alternation(a):
for idx in a.children.indices {
outputAsCanonical(a.children[idx])
if a.children.index(after: idx) != a.children.endIndex {
output("|")
}
}
case let .concatenation(c):
c.children.forEach { outputAsCanonical($0) }
case let .group(g):
output(g.kind.value._canonicalBase)
outputAsCanonical(g.child)
output(")")
case let .conditional(c):
output("(")
outputAsCanonical(c.condition)
outputAsCanonical(c.trueBranch)
output("|")
outputAsCanonical(c.falseBranch)
case let .quantification(q):
outputAsCanonical(q.child)
output(q.amount.value._canonicalBase)
output(q.kind.value._canonicalBase)
case let .quote(q):
output(q._canonicalBase)
case let .trivia(t):
// TODO: We might want to output comments...
_ = t
output("")
case let .atom(a):
output(a._canonicalBase)
case let .customCharacterClass(ccc):
outputAsCanonical(ccc)
case let .absentFunction(abs):
outputAsCanonical(abs)
case .empty:
output("")
case .groupTransform:
output("/* TODO: get groupTransform out of AST */")
}
}