// Path: src/main/java/com/github/kmizu/yapp/Ast.java
// public static class Char extends Element {
//   public final char value;
//   public Char(char value) {
//     this.value = value;
//   }
// }
// 
// Path: src/main/java/com/github/kmizu/yapp/Ast.java
// public abstract static class Element {}
// 
// Path: src/main/java/com/github/kmizu/yapp/Ast.java
// public static class Range extends Element {
//   public final char start;
//   public final char end;
//   public Range(char start, char end) {
//     this.start = start;
//     this.end = end;
//   }
// }


import java.util.Set;
import com.github.kmizu.yapp.Ast.CharClass.Char;
import com.github.kmizu.yapp.Ast.CharClass.Element;
import com.github.kmizu.yapp.Ast.CharClass.Range;
    }
    
    @Override
    public String toString() {
      return ".";
    }
  }

  /**
   * An empty expression of a RE.
   * @author Kota Mizushima
   *
   */  
  public static class Empty extends Expression {
    @Override
    public <R, C> R accept(Visitor<C, R> visitor, C context) {
      return visitor.visit(this, context);
    }
    
    @Override
    public String toString() {
      return "";
    }
  }
  
  /**
   * A character expression of a RE.
   * @author Kota Mizushima
   *
   */  
// Path: src/main/java/com/github/kmizu/yapp/Ast.java
// public static class Char extends Element {
//   public final char value;
//   public Char(char value) {
//     this.value = value;
//   }
// }
// 
// Path: src/main/java/com/github/kmizu/yapp/Ast.java
// public abstract static class Element {}
// 
// Path: src/main/java/com/github/kmizu/yapp/Ast.java
// public static class Range extends Element {
//   public final char start;
//   public final char end;
//   public Range(char start, char end) {
//     this.start = start;
//     this.end = end;
//   }
// }


// Path: src/main/java/com/github/kmizu/yapp/Regex.java
import java.util.Set;
import com.github.kmizu.yapp.Ast.CharClass.Char;
import com.github.kmizu.yapp.Ast.CharClass.Element;
import com.github.kmizu.yapp.Ast.CharClass.Range;

    }
    
    @Override
    public String toString() {
      return ".";
    }
  }

  /**
   * An empty expression of a RE.
   * @author Kota Mizushima
   *
   */  
  public static class Empty extends Expression {
    @Override
    public <R, C> R accept(Visitor<C, R> visitor, C context) {
      return visitor.visit(this, context);
    }
    
    @Override
    public String toString() {
      return "";
    }
  }
  
  /**
   * A character expression of a RE.
   * @author Kota Mizushima
   *
   */  
  public static class Char extends Expression {