import { Rule as e, Terminal as n, Alternation as r, Repetition as o, RepetitionWithSeparator as a, RepetitionMandatoryWithSeparator as s, RepetitionMandatory as v, Option as p, Alternative as h, NonTerminal as d } from "./model.js";
class u {
  visit(t) {
    const i = t;
    switch (i.constructor) {
      case d:
        return this.visitNonTerminal(i);
      case h:
        return this.visitAlternative(i);
      case p:
        return this.visitOption(i);
      case v:
        return this.visitRepetitionMandatory(i);
      case s:
        return this.visitRepetitionMandatoryWithSeparator(i);
      case a:
        return this.visitRepetitionWithSeparator(i);
      case o:
        return this.visitRepetition(i);
      case r:
        return this.visitAlternation(i);
      case n:
        return this.visitTerminal(i);
      case e:
        return this.visitRule(i);
      /* c8 ignore next 2 */
      default:
        throw Error("non exhaustive match");
    }
  }
  /* c8 ignore next */
  visitNonTerminal(t) {
  }
  /* c8 ignore next */
  visitAlternative(t) {
  }
  /* c8 ignore next */
  visitOption(t) {
  }
  /* c8 ignore next */
  visitRepetition(t) {
  }
  /* c8 ignore next */
  visitRepetitionMandatory(t) {
  }
  /* c8 ignore next 3 */
  visitRepetitionMandatoryWithSeparator(t) {
  }
  /* c8 ignore next */
  visitRepetitionWithSeparator(t) {
  }
  /* c8 ignore next */
  visitAlternation(t) {
  }
  /* c8 ignore next */
  visitTerminal(t) {
  }
  /* c8 ignore next */
  visitRule(t) {
  }
}
export {
  u as GAstVisitor
};
