mutating func outputAsCanonical()

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 */")
    }
  }