import demeter.*;
class Person implements Cloneable {
  protected Ident personname;
  public Ident get_personname() { return personname; }
  public void set_personname(Ident new_personname)
    { personname = new_personname; }
  protected Person spouse;
  public Person get_spouse() { return spouse; }
  public void set_spouse(Person new_spouse)
    { spouse = new_spouse; }
  protected Person_NList siblings;
  public Person_NList get_siblings() { return siblings; }
  public void set_siblings(Person_NList new_siblings)
    { siblings = new_siblings; }
  Person() { super(); }
  public Person(Ident personname, Person spouse, Person_NList siblings) {
    super();
    set_personname(personname);
    set_spouse(spouse);
    set_siblings(siblings);
  }
  public static Person parse(java.io.InputStream in) throws ParseError
    { return new Parser(in)._Person(); }
  public static Person parse(String s) {
    try { return parse(new java.io.ByteArrayInputStream(s.getBytes())); }
    catch (ParseError e) { throw new RuntimeException(e.toString()); }
  }
  void universal_trv0_bef(UniversalVisitor _v_) {
    _v_.before(this);
  }
  void universal_trv0_aft(UniversalVisitor _v_) {
    _v_.after(this);
  }
  void universal_trv0(UniversalVisitor _v_) {
    universal_trv0_bef(_v_);
    _v_.before_personname(this, personname);
    _v_.after_personname(this, personname);
    if (spouse != null) {
      _v_.before_spouse(this, spouse);
    spouse.universal_trv0(_v_);
      _v_.after_spouse(this, spouse);
    }
    if (siblings != null) {
      _v_.before_siblings(this, siblings);
    siblings.universal_trv0(_v_);
      _v_.after_siblings(this, siblings);
    }
    universal_trv0_aft(_v_);
  }
}

