using static Generator;

public static class AstGenerator {
  public static void Main() {
    Generate(
      "AstGenerated.cs",
      "using System.Collections.Generic;",
      "namespace Ast {",
      "}",
      "Ast.",
      Types(
        Variant("Expr",
          Case("int", "Int"),
          Case("string", "String")),

        Variant("Val",
          Case("int", "Int"),
          Case("string", "String"),
          Case("bool", "Bool")),

        Variant("ParserResult",
          Case("(MixFix.Annotation, ParserResult)", "Annotated"),
          Case("Lexer.Lexeme", "Terminal"),
          Case("IEnumerable<ParserResult>", "Productions")),

        Variant("ParserResult2",
          Case("ValueTuple<MixFix.Associativity, IEnumerable<OperatorOrHole>>", "SamePrecedence")),
        Variant("OperatorOrHole",
          Case("ValueTuple<MixFix.Operator, IEnumerable<SamePrecedenceOrTerminal>>", "Operator"),
          Case("ParserResult2", "Hole")),
        Variant("SamePrecedenceOrTerminal",
          Case("ParserResult2", "SamePrecedence"),
          Case("Lexer.Lexeme", "Terminal")),

        Variant("AstNode",
          Case("Lexer.Lexeme", "Terminal"),
          Case("ValueTuple<MixFix.Operator, IEnumerable<AstNode>>", "Operator"))));
  }
}