// This file is automatically generated by DemeterJ.

EqualVisitor {
  {{
    private java.util.Stack history = new java.util.Stack();
    public EqualVisitor(Object obj) {
      history.push(obj);
    }
  }}

  before Main {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp1 = host.get_s();
    Object temp2 = ((Main) obj).get_s();
    if(temp1 == null && temp2 == null) {}
    else if(temp1 == null ||
            temp2 == null ||
            !temp1.equals(temp2)) { is_equal = false; return; }
  }}

  before -> Examples, sawql_list, SawQL_List {{
    if (is_equal) {
      Examples obj = (Examples) history.peek();
      Object temp3 = obj.get_sawql_list();
      if(temp3==null) { is_equal = false; return; }
      history.push(temp3);
    }
  }}
  after -> Examples, sawql_list, SawQL_List {{
    if (is_equal) history.pop();
  }}

  before Examples {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SawQL, element, Element {{
    if (is_equal) {
      SawQL obj = (SawQL) history.peek();
      Object temp4 = obj.get_element();
      if(temp4==null) { is_equal = false; return; }
      history.push(temp4);
    }
  }}
  after -> SawQL, element, Element {{
    if (is_equal) history.pop();
  }}

  before -> SawQL, reltimeelement_list, RelTimeElement_List {{
    if (is_equal) {
      SawQL obj = (SawQL) history.peek();
      Object temp5 = obj.get_reltimeelement_list();
      if(temp5==null) { is_equal = false; return; }
      history.push(temp5);
    }
  }}
  after -> SawQL, reltimeelement_list, RelTimeElement_List {{
    if (is_equal) history.pop();
  }}

  before SawQL {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Element {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> RelTimeElement, reltime, RelTime {{
    if (is_equal) {
      RelTimeElement obj = (RelTimeElement) history.peek();
      Object temp6 = obj.get_reltime();
      if(temp6==null) { is_equal = false; return; }
      history.push(temp6);
    }
  }}
  after -> RelTimeElement, reltime, RelTime {{
    if (is_equal) history.pop();
  }}

  before -> RelTimeElement, element, Element {{
    if (is_equal) {
      RelTimeElement obj = (RelTimeElement) history.peek();
      Object temp7 = obj.get_element();
      if(temp7==null) { is_equal = false; return; }
      history.push(temp7);
    }
  }}
  after -> RelTimeElement, element, Element {{
    if (is_equal) history.pop();
  }}

  before RelTimeElement {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before SubQuery {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Simple, keyword, Keyword {{
    if (is_equal) {
      Simple obj = (Simple) history.peek();
      Object temp8 = obj.get_keyword();
      if(temp8==null) { is_equal = false; return; }
      history.push(temp8);
    }
  }}
  after -> Simple, keyword, Keyword {{
    if (is_equal) history.pop();
  }}

  before -> Simple, parameter, Parameter {{
    if (is_equal) {
      Simple obj = (Simple) history.peek();
      Object temp9 = obj.get_parameter();
      if(temp9==null) { is_equal = false; return; }
      history.push(temp9);
    }
  }}
  after -> Simple, parameter, Parameter {{
    if (is_equal) history.pop();
  }}

  before Simple {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Keyword {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Hosts {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Service {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before IPAddress {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Compound, op, Op {{
    if (is_equal) {
      Compound obj = (Compound) history.peek();
      Object temp10 = obj.get_op();
      if(temp10==null) { is_equal = false; return; }
      history.push(temp10);
    }
  }}
  after -> Compound, op, Op {{
    if (is_equal) history.pop();
  }}

  before -> Compound, args, SubQuery_List {{
    if (is_equal) {
      Compound obj = (Compound) history.peek();
      Object temp11 = obj.get_args();
      if(temp11==null) { is_equal = false; return; }
      history.push(temp11);
    }
  }}
  after -> Compound, args, SubQuery_List {{
    if (is_equal) history.pop();
  }}

  before Compound {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Op {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before And {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Or {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before RelTime {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Minutes {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_i() == ((Minutes) obj).get_i();
  }}

  before Anytime {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Parameter {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before Constant {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp12 = host.get_string();
    Object temp13 = ((Constant) obj).get_string();
    if(temp12 == null && temp13 == null) {}
    else if(temp12 == null ||
            temp13 == null ||
            !temp12.equals(temp13)) { is_equal = false; return; }
  }}

  before -> Variable, variablename, VariableName {{
    if (is_equal) {
      Variable obj = (Variable) history.peek();
      Object temp14 = obj.get_variablename();
      if(temp14==null) { is_equal = false; return; }
      history.push(temp14);
    }
  }}
  after -> Variable, variablename, VariableName {{
    if (is_equal) history.pop();
  }}

  before Variable {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before RegularExp {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before VariableName {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp15 = host.get_ident();
    Object temp16 = ((VariableName) obj).get_ident();
    if(temp15 == null && temp16 == null) {}
    else if(temp15 == null ||
            temp16 == null ||
            !temp15.equals(temp16)) { is_equal = false; return; }
  }}

  before PrintVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((PrintVisitor) obj).get_indent();
    is_equal = is_equal && host.get_needSpace() == ((PrintVisitor) obj).get_needSpace();
  }}

  before CopyVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp17 = host.get_copy();
    Object temp18 = ((CopyVisitor) obj).get_copy();
    if(temp17 == null && temp18 == null) {}
    else if(temp17 == null ||
            temp18 == null ||
            !temp17.equals(temp18)) { is_equal = false; return; }
  }}

  before SubgraphVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_is_equal() == ((SubgraphVisitor) obj).get_is_equal();
  }}

  before EqualVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_is_equal() == ((EqualVisitor) obj).get_is_equal();
  }}

  before DisplayVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((DisplayVisitor) obj).get_indent();
  }}

  before TraceVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    is_equal = is_equal && host.get_indent() == ((TraceVisitor) obj).get_indent();
  }}

  before UniversalVisitor {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SawQL_List, first, Nonempty_SawQL_List {{
    if (is_equal) {
      SawQL_List obj = (SawQL_List) history.peek();
      Object temp19 = obj.get_first();
      if(temp19==null) { is_equal = false; return; }
      history.push(temp19);
    }
  }}
  after -> SawQL_List, first, Nonempty_SawQL_List {{
    if (is_equal) history.pop();
  }}

  before SawQL_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> RelTimeElement_List, first, Nonempty_RelTimeElement_List {{
    if (is_equal) {
      RelTimeElement_List obj = (RelTimeElement_List) history.peek();
      Object temp20 = obj.get_first();
      if(temp20==null) { is_equal = false; return; }
      history.push(temp20);
    }
  }}
  after -> RelTimeElement_List, first, Nonempty_RelTimeElement_List {{
    if (is_equal) history.pop();
  }}

  before RelTimeElement_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> SubQuery_List, first, Nonempty_SubQuery_List {{
    if (is_equal) {
      SubQuery_List obj = (SubQuery_List) history.peek();
      Object temp21 = obj.get_first();
      if(temp21==null) { is_equal = false; return; }
      history.push(temp21);
    }
  }}
  after -> SubQuery_List, first, Nonempty_SubQuery_List {{
    if (is_equal) history.pop();
  }}

  before SubQuery_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_SawQL_List, it, SawQL {{
    if (is_equal) {
      Nonempty_SawQL_List obj = (Nonempty_SawQL_List) history.peek();
      Object temp22 = obj.get_it();
      if(temp22==null) { is_equal = false; return; }
      history.push(temp22);
    }
  }}
  after -> Nonempty_SawQL_List, it, SawQL {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_SawQL_List, next, Nonempty_SawQL_List {{
    if (is_equal) {
      Nonempty_SawQL_List obj = (Nonempty_SawQL_List) history.peek();
      Object temp23 = obj.get_next();
      if(temp23==null) { is_equal = false; return; }
      history.push(temp23);
    }
  }}
  after -> Nonempty_SawQL_List, next, Nonempty_SawQL_List {{
    if (is_equal) history.pop();
  }}

  before Nonempty_SawQL_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_RelTimeElement_List, it, RelTimeElement {{
    if (is_equal) {
      Nonempty_RelTimeElement_List obj = (Nonempty_RelTimeElement_List) history.peek();
      Object temp24 = obj.get_it();
      if(temp24==null) { is_equal = false; return; }
      history.push(temp24);
    }
  }}
  after -> Nonempty_RelTimeElement_List, it, RelTimeElement {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_RelTimeElement_List, next, Nonempty_RelTimeElement_List {{
    if (is_equal) {
      Nonempty_RelTimeElement_List obj = (Nonempty_RelTimeElement_List) history.peek();
      Object temp25 = obj.get_next();
      if(temp25==null) { is_equal = false; return; }
      history.push(temp25);
    }
  }}
  after -> Nonempty_RelTimeElement_List, next, Nonempty_RelTimeElement_List {{
    if (is_equal) history.pop();
  }}

  before Nonempty_RelTimeElement_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  before -> Nonempty_SubQuery_List, it, SubQuery {{
    if (is_equal) {
      Nonempty_SubQuery_List obj = (Nonempty_SubQuery_List) history.peek();
      Object temp26 = obj.get_it();
      if(temp26==null) { is_equal = false; return; }
      history.push(temp26);
    }
  }}
  after -> Nonempty_SubQuery_List, it, SubQuery {{
    if (is_equal) history.pop();
  }}

  before -> Nonempty_SubQuery_List, next, Nonempty_SubQuery_List {{
    if (is_equal) {
      Nonempty_SubQuery_List obj = (Nonempty_SubQuery_List) history.peek();
      Object temp27 = obj.get_next();
      if(temp27==null) { is_equal = false; return; }
      history.push(temp27);
    }
  }}
  after -> Nonempty_SubQuery_List, next, Nonempty_SubQuery_List {{
    if (is_equal) history.pop();
  }}

  before Nonempty_SubQuery_List {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
  }}

  return boolean {{ is_equal }}
}