// This file is automatically generated by DemeterJ.

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

  before -> CompilationUnit, packagedeclaration, PackageDeclaration {{
    if (is_equal) {
      CompilationUnit obj = (CompilationUnit) history.peek();
      Object temp1 = obj.get_packagedeclaration();
      if(temp1==null) { is_equal = false; return; }
      history.push(temp1);
    }
  }}
  after -> CompilationUnit, packagedeclaration, PackageDeclaration {{
    if (is_equal) history.pop();
  }}

  before -> CompilationUnit, importdeclarations, ImportDeclarations {{
    if (is_equal) {
      CompilationUnit obj = (CompilationUnit) history.peek();
      Object temp2 = obj.get_importdeclarations();
      if(temp2==null) { is_equal = false; return; }
      history.push(temp2);
    }
  }}
  after -> CompilationUnit, importdeclarations, ImportDeclarations {{
    if (is_equal) history.pop();
  }}

  before -> CompilationUnit, typedeclarations, TypeDeclarations {{
    if (is_equal) {
      CompilationUnit obj = (CompilationUnit) history.peek();
      Object temp3 = obj.get_typedeclarations();
      if(temp3==null) { is_equal = false; return; }
      history.push(temp3);
    }
  }}
  after -> CompilationUnit, typedeclarations, TypeDeclarations {{
    if (is_equal) history.pop();
  }}

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

  before -> PackageDeclaration, name, Name {{
    if (is_equal) {
      PackageDeclaration obj = (PackageDeclaration) history.peek();
      Object temp4 = obj.get_name();
      if(temp4==null) { is_equal = false; return; }
      history.push(temp4);
    }
  }}
  after -> PackageDeclaration, name, Name {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> ImportDeclaration, name, Name {{
    if (is_equal) {
      ImportDeclaration obj = (ImportDeclaration) history.peek();
      Object temp6 = obj.get_name();
      if(temp6==null) { is_equal = false; return; }
      history.push(temp6);
    }
  }}
  after -> ImportDeclaration, name, Name {{
    if (is_equal) history.pop();
  }}

  before -> ImportDeclaration, dotstar, DotStar {{
    if (is_equal) {
      ImportDeclaration obj = (ImportDeclaration) history.peek();
      Object temp7 = obj.get_dotstar();
      if(temp7==null) { is_equal = false; return; }
      history.push(temp7);
    }
  }}
  after -> ImportDeclaration, dotstar, DotStar {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

  before -> SemiColonTD, semicolon, SemiColon {{
    if (is_equal) {
      SemiColonTD obj = (SemiColonTD) history.peek();
      Object temp9 = obj.get_semicolon();
      if(temp9==null) { is_equal = false; return; }
      history.push(temp9);
    }
  }}
  after -> SemiColonTD, semicolon, SemiColon {{
    if (is_equal) history.pop();
  }}

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

  before -> ClassDeclaration, classmodifiers, ClassModifiers {{
    if (is_equal) {
      ClassDeclaration obj = (ClassDeclaration) history.peek();
      Object temp10 = obj.get_classmodifiers();
      if(temp10==null) { is_equal = false; return; }
      history.push(temp10);
    }
  }}
  after -> ClassDeclaration, classmodifiers, ClassModifiers {{
    if (is_equal) history.pop();
  }}

  before -> ClassDeclaration, unmodifiedclassdeclaration, UnmodifiedClassDeclaration {{
    if (is_equal) {
      ClassDeclaration obj = (ClassDeclaration) history.peek();
      Object temp11 = obj.get_unmodifiedclassdeclaration();
      if(temp11==null) { is_equal = false; return; }
      history.push(temp11);
    }
  }}
  after -> ClassDeclaration, unmodifiedclassdeclaration, UnmodifiedClassDeclaration {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> CM_Abstract, cabstract, CAbstract {{
    if (is_equal) {
      CM_Abstract obj = (CM_Abstract) history.peek();
      Object temp13 = obj.get_cabstract();
      if(temp13==null) { is_equal = false; return; }
      history.push(temp13);
    }
  }}
  after -> CM_Abstract, cabstract, CAbstract {{
    if (is_equal) history.pop();
  }}

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

  before -> CM_Final, cfinal, CFinal {{
    if (is_equal) {
      CM_Final obj = (CM_Final) history.peek();
      Object temp14 = obj.get_cfinal();
      if(temp14==null) { is_equal = false; return; }
      history.push(temp14);
    }
  }}
  after -> CM_Final, cfinal, CFinal {{
    if (is_equal) history.pop();
  }}

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

  before -> CM_Public, cpublic, CPublic {{
    if (is_equal) {
      CM_Public obj = (CM_Public) history.peek();
      Object temp15 = obj.get_cpublic();
      if(temp15==null) { is_equal = false; return; }
      history.push(temp15);
    }
  }}
  after -> CM_Public, cpublic, CPublic {{
    if (is_equal) history.pop();
  }}

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

  before -> UnmodifiedClassDeclaration, name, Name {{
    if (is_equal) {
      UnmodifiedClassDeclaration obj = (UnmodifiedClassDeclaration) history.peek();
      Object temp18 = obj.get_name();
      if(temp18==null) { is_equal = false; return; }
      history.push(temp18);
    }
  }}
  after -> UnmodifiedClassDeclaration, name, Name {{
    if (is_equal) history.pop();
  }}

  before -> UnmodifiedClassDeclaration, namelist, NameList {{
    if (is_equal) {
      UnmodifiedClassDeclaration obj = (UnmodifiedClassDeclaration) history.peek();
      Object temp19 = obj.get_namelist();
      if(temp19==null) { is_equal = false; return; }
      history.push(temp19);
    }
  }}
  after -> UnmodifiedClassDeclaration, namelist, NameList {{
    if (is_equal) history.pop();
  }}

  before -> UnmodifiedClassDeclaration, classbody, ClassBody {{
    if (is_equal) {
      UnmodifiedClassDeclaration obj = (UnmodifiedClassDeclaration) history.peek();
      Object temp20 = obj.get_classbody();
      if(temp20==null) { is_equal = false; return; }
      history.push(temp20);
    }
  }}
  after -> UnmodifiedClassDeclaration, classbody, ClassBody {{
    if (is_equal) history.pop();
  }}

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

  before -> ClassBody, classbodydeclarations, ClassBodyDeclarations {{
    if (is_equal) {
      ClassBody obj = (ClassBody) history.peek();
      Object temp21 = obj.get_classbodydeclarations();
      if(temp21==null) { is_equal = false; return; }
      history.push(temp21);
    }
  }}
  after -> ClassBody, classbodydeclarations, ClassBodyDeclarations {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> NestedClassDeclaration, nestedclassmodifiers, NestedClassModifiers {{
    if (is_equal) {
      NestedClassDeclaration obj = (NestedClassDeclaration) history.peek();
      Object temp23 = obj.get_nestedclassmodifiers();
      if(temp23==null) { is_equal = false; return; }
      history.push(temp23);
    }
  }}
  after -> NestedClassDeclaration, nestedclassmodifiers, NestedClassModifiers {{
    if (is_equal) history.pop();
  }}

  before -> NestedClassDeclaration, unmodifiedclassdeclaration, UnmodifiedClassDeclaration {{
    if (is_equal) {
      NestedClassDeclaration obj = (NestedClassDeclaration) history.peek();
      Object temp24 = obj.get_unmodifiedclassdeclaration();
      if(temp24==null) { is_equal = false; return; }
      history.push(temp24);
    }
  }}
  after -> NestedClassDeclaration, unmodifiedclassdeclaration, UnmodifiedClassDeclaration {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> NCM_Static, cstatic, CStatic {{
    if (is_equal) {
      NCM_Static obj = (NCM_Static) history.peek();
      Object temp26 = obj.get_cstatic();
      if(temp26==null) { is_equal = false; return; }
      history.push(temp26);
    }
  }}
  after -> NCM_Static, cstatic, CStatic {{
    if (is_equal) history.pop();
  }}

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

  before -> NCM_Abstract, cabstract, CAbstract {{
    if (is_equal) {
      NCM_Abstract obj = (NCM_Abstract) history.peek();
      Object temp27 = obj.get_cabstract();
      if(temp27==null) { is_equal = false; return; }
      history.push(temp27);
    }
  }}
  after -> NCM_Abstract, cabstract, CAbstract {{
    if (is_equal) history.pop();
  }}

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

  before -> NCM_Final, cfinal, CFinal {{
    if (is_equal) {
      NCM_Final obj = (NCM_Final) history.peek();
      Object temp28 = obj.get_cfinal();
      if(temp28==null) { is_equal = false; return; }
      history.push(temp28);
    }
  }}
  after -> NCM_Final, cfinal, CFinal {{
    if (is_equal) history.pop();
  }}

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

  before -> NCM_Public, cpublic, CPublic {{
    if (is_equal) {
      NCM_Public obj = (NCM_Public) history.peek();
      Object temp29 = obj.get_cpublic();
      if(temp29==null) { is_equal = false; return; }
      history.push(temp29);
    }
  }}
  after -> NCM_Public, cpublic, CPublic {{
    if (is_equal) history.pop();
  }}

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

  before -> NCM_Protected, cprotected, CProtected {{
    if (is_equal) {
      NCM_Protected obj = (NCM_Protected) history.peek();
      Object temp30 = obj.get_cprotected();
      if(temp30==null) { is_equal = false; return; }
      history.push(temp30);
    }
  }}
  after -> NCM_Protected, cprotected, CProtected {{
    if (is_equal) history.pop();
  }}

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

  before -> NCM_Private, cprivate, CPrivate {{
    if (is_equal) {
      NCM_Private obj = (NCM_Private) history.peek();
      Object temp31 = obj.get_cprivate();
      if(temp31==null) { is_equal = false; return; }
      history.push(temp31);
    }
  }}
  after -> NCM_Private, cprivate, CPrivate {{
    if (is_equal) history.pop();
  }}

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

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

  before -> CBD_NestedClassDeclaration, nestedclassdeclaration, NestedClassDeclaration {{
    if (is_equal) {
      CBD_NestedClassDeclaration obj = (CBD_NestedClassDeclaration) history.peek();
      Object temp32 = obj.get_nestedclassdeclaration();
      if(temp32==null) { is_equal = false; return; }
      history.push(temp32);
    }
  }}
  after -> CBD_NestedClassDeclaration, nestedclassdeclaration, NestedClassDeclaration {{
    if (is_equal) history.pop();
  }}

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

  before -> CBD_NestedInterfaceDeclaration, nestedinterfacedeclaration, NestedInterfaceDeclaration {{
    if (is_equal) {
      CBD_NestedInterfaceDeclaration obj = (CBD_NestedInterfaceDeclaration) history.peek();
      Object temp33 = obj.get_nestedinterfacedeclaration();
      if(temp33==null) { is_equal = false; return; }
      history.push(temp33);
    }
  }}
  after -> CBD_NestedInterfaceDeclaration, nestedinterfacedeclaration, NestedInterfaceDeclaration {{
    if (is_equal) history.pop();
  }}

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

  before -> CBD_MethodDeclaration, methoddeclaration, MethodDeclaration {{
    if (is_equal) {
      CBD_MethodDeclaration obj = (CBD_MethodDeclaration) history.peek();
      Object temp34 = obj.get_methoddeclaration();
      if(temp34==null) { is_equal = false; return; }
      history.push(temp34);
    }
  }}
  after -> CBD_MethodDeclaration, methoddeclaration, MethodDeclaration {{
    if (is_equal) history.pop();
  }}

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

  before -> CBD_FieldDeclaration, fielddeclaration, FieldDeclaration {{
    if (is_equal) {
      CBD_FieldDeclaration obj = (CBD_FieldDeclaration) history.peek();
      Object temp35 = obj.get_fielddeclaration();
      if(temp35==null) { is_equal = false; return; }
      history.push(temp35);
    }
  }}
  after -> CBD_FieldDeclaration, fielddeclaration, FieldDeclaration {{
    if (is_equal) history.pop();
  }}

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

  before -> InterfaceDeclaration, interfacemodifiers, InterfaceModifiers {{
    if (is_equal) {
      InterfaceDeclaration obj = (InterfaceDeclaration) history.peek();
      Object temp36 = obj.get_interfacemodifiers();
      if(temp36==null) { is_equal = false; return; }
      history.push(temp36);
    }
  }}
  after -> InterfaceDeclaration, interfacemodifiers, InterfaceModifiers {{
    if (is_equal) history.pop();
  }}

  before -> InterfaceDeclaration, unmodifiedinterfacedeclaration, UnmodifiedInterfaceDeclaration {{
    if (is_equal) {
      InterfaceDeclaration obj = (InterfaceDeclaration) history.peek();
      Object temp37 = obj.get_unmodifiedinterfacedeclaration();
      if(temp37==null) { is_equal = false; return; }
      history.push(temp37);
    }
  }}
  after -> InterfaceDeclaration, unmodifiedinterfacedeclaration, UnmodifiedInterfaceDeclaration {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> IM_Abstract, cabstract, CAbstract {{
    if (is_equal) {
      IM_Abstract obj = (IM_Abstract) history.peek();
      Object temp39 = obj.get_cabstract();
      if(temp39==null) { is_equal = false; return; }
      history.push(temp39);
    }
  }}
  after -> IM_Abstract, cabstract, CAbstract {{
    if (is_equal) history.pop();
  }}

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

  before -> IM_Public, cpublic, CPublic {{
    if (is_equal) {
      IM_Public obj = (IM_Public) history.peek();
      Object temp40 = obj.get_cpublic();
      if(temp40==null) { is_equal = false; return; }
      history.push(temp40);
    }
  }}
  after -> IM_Public, cpublic, CPublic {{
    if (is_equal) history.pop();
  }}

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

  before -> NestedInterfaceDeclaration, nestedinterfacemodifiers, NestedInterfaceModifiers {{
    if (is_equal) {
      NestedInterfaceDeclaration obj = (NestedInterfaceDeclaration) history.peek();
      Object temp41 = obj.get_nestedinterfacemodifiers();
      if(temp41==null) { is_equal = false; return; }
      history.push(temp41);
    }
  }}
  after -> NestedInterfaceDeclaration, nestedinterfacemodifiers, NestedInterfaceModifiers {{
    if (is_equal) history.pop();
  }}

  before -> NestedInterfaceDeclaration, unmodifiedinterfacedeclaration, UnmodifiedInterfaceDeclaration {{
    if (is_equal) {
      NestedInterfaceDeclaration obj = (NestedInterfaceDeclaration) history.peek();
      Object temp42 = obj.get_unmodifiedinterfacedeclaration();
      if(temp42==null) { is_equal = false; return; }
      history.push(temp42);
    }
  }}
  after -> NestedInterfaceDeclaration, unmodifiedinterfacedeclaration, UnmodifiedInterfaceDeclaration {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> NIM_Static, cstatic, CStatic {{
    if (is_equal) {
      NIM_Static obj = (NIM_Static) history.peek();
      Object temp44 = obj.get_cstatic();
      if(temp44==null) { is_equal = false; return; }
      history.push(temp44);
    }
  }}
  after -> NIM_Static, cstatic, CStatic {{
    if (is_equal) history.pop();
  }}

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

  before -> NIM_Abstract, cabstract, CAbstract {{
    if (is_equal) {
      NIM_Abstract obj = (NIM_Abstract) history.peek();
      Object temp45 = obj.get_cabstract();
      if(temp45==null) { is_equal = false; return; }
      history.push(temp45);
    }
  }}
  after -> NIM_Abstract, cabstract, CAbstract {{
    if (is_equal) history.pop();
  }}

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

  before -> NIM_Final, cfinal, CFinal {{
    if (is_equal) {
      NIM_Final obj = (NIM_Final) history.peek();
      Object temp46 = obj.get_cfinal();
      if(temp46==null) { is_equal = false; return; }
      history.push(temp46);
    }
  }}
  after -> NIM_Final, cfinal, CFinal {{
    if (is_equal) history.pop();
  }}

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

  before -> NIM_Public, cpublic, CPublic {{
    if (is_equal) {
      NIM_Public obj = (NIM_Public) history.peek();
      Object temp47 = obj.get_cpublic();
      if(temp47==null) { is_equal = false; return; }
      history.push(temp47);
    }
  }}
  after -> NIM_Public, cpublic, CPublic {{
    if (is_equal) history.pop();
  }}

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

  before -> NIM_Protected, cprotected, CProtected {{
    if (is_equal) {
      NIM_Protected obj = (NIM_Protected) history.peek();
      Object temp48 = obj.get_cprotected();
      if(temp48==null) { is_equal = false; return; }
      history.push(temp48);
    }
  }}
  after -> NIM_Protected, cprotected, CProtected {{
    if (is_equal) history.pop();
  }}

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

  before -> NIM_Private, cprivate, CPrivate {{
    if (is_equal) {
      NIM_Private obj = (NIM_Private) history.peek();
      Object temp49 = obj.get_cprivate();
      if(temp49==null) { is_equal = false; return; }
      history.push(temp49);
    }
  }}
  after -> NIM_Private, cprivate, CPrivate {{
    if (is_equal) history.pop();
  }}

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

  before -> UnmodifiedInterfaceDeclaration, identifier, Identifier {{
    if (is_equal) {
      UnmodifiedInterfaceDeclaration obj = (UnmodifiedInterfaceDeclaration) history.peek();
      Object temp50 = obj.get_identifier();
      if(temp50==null) { is_equal = false; return; }
      history.push(temp50);
    }
  }}
  after -> UnmodifiedInterfaceDeclaration, identifier, Identifier {{
    if (is_equal) history.pop();
  }}

  before -> UnmodifiedInterfaceDeclaration, namelist, NameList {{
    if (is_equal) {
      UnmodifiedInterfaceDeclaration obj = (UnmodifiedInterfaceDeclaration) history.peek();
      Object temp51 = obj.get_namelist();
      if(temp51==null) { is_equal = false; return; }
      history.push(temp51);
    }
  }}
  after -> UnmodifiedInterfaceDeclaration, namelist, NameList {{
    if (is_equal) history.pop();
  }}

  before -> UnmodifiedInterfaceDeclaration, interfacememberdeclarations, InterfaceMemberDeclarations {{
    if (is_equal) {
      UnmodifiedInterfaceDeclaration obj = (UnmodifiedInterfaceDeclaration) history.peek();
      Object temp52 = obj.get_interfacememberdeclarations();
      if(temp52==null) { is_equal = false; return; }
      history.push(temp52);
    }
  }}
  after -> UnmodifiedInterfaceDeclaration, interfacememberdeclarations, InterfaceMemberDeclarations {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> IMD_NestedClassDeclaration, nestedclassdeclaration, NestedClassDeclaration {{
    if (is_equal) {
      IMD_NestedClassDeclaration obj = (IMD_NestedClassDeclaration) history.peek();
      Object temp54 = obj.get_nestedclassdeclaration();
      if(temp54==null) { is_equal = false; return; }
      history.push(temp54);
    }
  }}
  after -> IMD_NestedClassDeclaration, nestedclassdeclaration, NestedClassDeclaration {{
    if (is_equal) history.pop();
  }}

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

  before -> IMD_NestedInterfaceDeclaration, nestedinterfacedeclaration, NestedInterfaceDeclaration {{
    if (is_equal) {
      IMD_NestedInterfaceDeclaration obj = (IMD_NestedInterfaceDeclaration) history.peek();
      Object temp55 = obj.get_nestedinterfacedeclaration();
      if(temp55==null) { is_equal = false; return; }
      history.push(temp55);
    }
  }}
  after -> IMD_NestedInterfaceDeclaration, nestedinterfacedeclaration, NestedInterfaceDeclaration {{
    if (is_equal) history.pop();
  }}

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

  before -> IMD_MethodDeclaration, methoddeclaration, MethodDeclaration {{
    if (is_equal) {
      IMD_MethodDeclaration obj = (IMD_MethodDeclaration) history.peek();
      Object temp56 = obj.get_methoddeclaration();
      if(temp56==null) { is_equal = false; return; }
      history.push(temp56);
    }
  }}
  after -> IMD_MethodDeclaration, methoddeclaration, MethodDeclaration {{
    if (is_equal) history.pop();
  }}

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

  before -> IMD_FieldDeclaration, fielddeclaration, FieldDeclaration {{
    if (is_equal) {
      IMD_FieldDeclaration obj = (IMD_FieldDeclaration) history.peek();
      Object temp57 = obj.get_fielddeclaration();
      if(temp57==null) { is_equal = false; return; }
      history.push(temp57);
    }
  }}
  after -> IMD_FieldDeclaration, fielddeclaration, FieldDeclaration {{
    if (is_equal) history.pop();
  }}

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

  before -> FieldDeclaration, fieldmodifiers, FieldModifiers {{
    if (is_equal) {
      FieldDeclaration obj = (FieldDeclaration) history.peek();
      Object temp58 = obj.get_fieldmodifiers();
      if(temp58==null) { is_equal = false; return; }
      history.push(temp58);
    }
  }}
  after -> FieldDeclaration, fieldmodifiers, FieldModifiers {{
    if (is_equal) history.pop();
  }}

  before -> FieldDeclaration, type, Type {{
    if (is_equal) {
      FieldDeclaration obj = (FieldDeclaration) history.peek();
      Object temp59 = obj.get_type();
      if(temp59==null) { is_equal = false; return; }
      history.push(temp59);
    }
  }}
  after -> FieldDeclaration, type, Type {{
    if (is_equal) history.pop();
  }}

  before -> FieldDeclaration, variabledeclarators, VariableDeclarators {{
    if (is_equal) {
      FieldDeclaration obj = (FieldDeclaration) history.peek();
      Object temp60 = obj.get_variabledeclarators();
      if(temp60==null) { is_equal = false; return; }
      history.push(temp60);
    }
  }}
  after -> FieldDeclaration, variabledeclarators, VariableDeclarators {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> FM_Public, cpublic, CPublic {{
    if (is_equal) {
      FM_Public obj = (FM_Public) history.peek();
      Object temp62 = obj.get_cpublic();
      if(temp62==null) { is_equal = false; return; }
      history.push(temp62);
    }
  }}
  after -> FM_Public, cpublic, CPublic {{
    if (is_equal) history.pop();
  }}

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

  before -> FM_Protected, cprotected, CProtected {{
    if (is_equal) {
      FM_Protected obj = (FM_Protected) history.peek();
      Object temp63 = obj.get_cprotected();
      if(temp63==null) { is_equal = false; return; }
      history.push(temp63);
    }
  }}
  after -> FM_Protected, cprotected, CProtected {{
    if (is_equal) history.pop();
  }}

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

  before -> FM_Private, cprivate, CPrivate {{
    if (is_equal) {
      FM_Private obj = (FM_Private) history.peek();
      Object temp64 = obj.get_cprivate();
      if(temp64==null) { is_equal = false; return; }
      history.push(temp64);
    }
  }}
  after -> FM_Private, cprivate, CPrivate {{
    if (is_equal) history.pop();
  }}

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

  before -> FM_Static, cstatic, CStatic {{
    if (is_equal) {
      FM_Static obj = (FM_Static) history.peek();
      Object temp65 = obj.get_cstatic();
      if(temp65==null) { is_equal = false; return; }
      history.push(temp65);
    }
  }}
  after -> FM_Static, cstatic, CStatic {{
    if (is_equal) history.pop();
  }}

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

  before -> FM_Final, cfinal, CFinal {{
    if (is_equal) {
      FM_Final obj = (FM_Final) history.peek();
      Object temp66 = obj.get_cfinal();
      if(temp66==null) { is_equal = false; return; }
      history.push(temp66);
    }
  }}
  after -> FM_Final, cfinal, CFinal {{
    if (is_equal) history.pop();
  }}

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

  before -> FM_Transient, ctransient, CTransient {{
    if (is_equal) {
      FM_Transient obj = (FM_Transient) history.peek();
      Object temp67 = obj.get_ctransient();
      if(temp67==null) { is_equal = false; return; }
      history.push(temp67);
    }
  }}
  after -> FM_Transient, ctransient, CTransient {{
    if (is_equal) history.pop();
  }}

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

  before -> FM_Volatile, cvolatile, CVolatile {{
    if (is_equal) {
      FM_Volatile obj = (FM_Volatile) history.peek();
      Object temp68 = obj.get_cvolatile();
      if(temp68==null) { is_equal = false; return; }
      history.push(temp68);
    }
  }}
  after -> FM_Volatile, cvolatile, CVolatile {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> VariableDeclarator, variabledeclaratorid, VariableDeclaratorId {{
    if (is_equal) {
      VariableDeclarator obj = (VariableDeclarator) history.peek();
      Object temp70 = obj.get_variabledeclaratorid();
      if(temp70==null) { is_equal = false; return; }
      history.push(temp70);
    }
  }}
  after -> VariableDeclarator, variabledeclaratorid, VariableDeclaratorId {{
    if (is_equal) history.pop();
  }}

  before -> VariableDeclarator, variableinitializer, VariableInitializer {{
    if (is_equal) {
      VariableDeclarator obj = (VariableDeclarator) history.peek();
      Object temp71 = obj.get_variableinitializer();
      if(temp71==null) { is_equal = false; return; }
      history.push(temp71);
    }
  }}
  after -> VariableDeclarator, variableinitializer, VariableInitializer {{
    if (is_equal) history.pop();
  }}

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

  before -> VariableDeclaratorId, identifier, Identifier {{
    if (is_equal) {
      VariableDeclaratorId obj = (VariableDeclaratorId) history.peek();
      Object temp72 = obj.get_identifier();
      if(temp72==null) { is_equal = false; return; }
      history.push(temp72);
    }
  }}
  after -> VariableDeclaratorId, identifier, Identifier {{
    if (is_equal) history.pop();
  }}

  before -> VariableDeclaratorId, squarebrackets, SquareBrackets {{
    if (is_equal) {
      VariableDeclaratorId obj = (VariableDeclaratorId) history.peek();
      Object temp73 = obj.get_squarebrackets();
      if(temp73==null) { is_equal = false; return; }
      history.push(temp73);
    }
  }}
  after -> VariableDeclaratorId, squarebrackets, SquareBrackets {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

  before -> ArrayInitializer, variableinitializers, VariableInitializers {{
    if (is_equal) {
      ArrayInitializer obj = (ArrayInitializer) history.peek();
      Object temp75 = obj.get_variableinitializers();
      if(temp75==null) { is_equal = false; return; }
      history.push(temp75);
    }
  }}
  after -> ArrayInitializer, variableinitializers, VariableInitializers {{
    if (is_equal) history.pop();
  }}

  before -> ArrayInitializer, comma, Comma {{
    if (is_equal) {
      ArrayInitializer obj = (ArrayInitializer) history.peek();
      Object temp76 = obj.get_comma();
      if(temp76==null) { is_equal = false; return; }
      history.push(temp76);
    }
  }}
  after -> ArrayInitializer, comma, Comma {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> MethodDeclaration, methodmodifiers, MethodModifiers {{
    if (is_equal) {
      MethodDeclaration obj = (MethodDeclaration) history.peek();
      Object temp78 = obj.get_methodmodifiers();
      if(temp78==null) { is_equal = false; return; }
      history.push(temp78);
    }
  }}
  after -> MethodDeclaration, methodmodifiers, MethodModifiers {{
    if (is_equal) history.pop();
  }}

  before -> MethodDeclaration, resulttype, ResultType {{
    if (is_equal) {
      MethodDeclaration obj = (MethodDeclaration) history.peek();
      Object temp79 = obj.get_resulttype();
      if(temp79==null) { is_equal = false; return; }
      history.push(temp79);
    }
  }}
  after -> MethodDeclaration, resulttype, ResultType {{
    if (is_equal) history.pop();
  }}

  before -> MethodDeclaration, methoddeclarator, MethodDeclarator {{
    if (is_equal) {
      MethodDeclaration obj = (MethodDeclaration) history.peek();
      Object temp80 = obj.get_methoddeclarator();
      if(temp80==null) { is_equal = false; return; }
      history.push(temp80);
    }
  }}
  after -> MethodDeclaration, methoddeclarator, MethodDeclarator {{
    if (is_equal) history.pop();
  }}

  before -> MethodDeclaration, namelist, NameList {{
    if (is_equal) {
      MethodDeclaration obj = (MethodDeclaration) history.peek();
      Object temp81 = obj.get_namelist();
      if(temp81==null) { is_equal = false; return; }
      history.push(temp81);
    }
  }}
  after -> MethodDeclaration, namelist, NameList {{
    if (is_equal) history.pop();
  }}

  before -> MethodDeclaration, anyblock, AnyBlock {{
    if (is_equal) {
      MethodDeclaration obj = (MethodDeclaration) history.peek();
      Object temp82 = obj.get_anyblock();
      if(temp82==null) { is_equal = false; return; }
      history.push(temp82);
    }
  }}
  after -> MethodDeclaration, anyblock, AnyBlock {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> MM_Public, cpublic, CPublic {{
    if (is_equal) {
      MM_Public obj = (MM_Public) history.peek();
      Object temp84 = obj.get_cpublic();
      if(temp84==null) { is_equal = false; return; }
      history.push(temp84);
    }
  }}
  after -> MM_Public, cpublic, CPublic {{
    if (is_equal) history.pop();
  }}

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

  before -> MM_Protected, cprotected, CProtected {{
    if (is_equal) {
      MM_Protected obj = (MM_Protected) history.peek();
      Object temp85 = obj.get_cprotected();
      if(temp85==null) { is_equal = false; return; }
      history.push(temp85);
    }
  }}
  after -> MM_Protected, cprotected, CProtected {{
    if (is_equal) history.pop();
  }}

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

  before -> MM_Private, cprivate, CPrivate {{
    if (is_equal) {
      MM_Private obj = (MM_Private) history.peek();
      Object temp86 = obj.get_cprivate();
      if(temp86==null) { is_equal = false; return; }
      history.push(temp86);
    }
  }}
  after -> MM_Private, cprivate, CPrivate {{
    if (is_equal) history.pop();
  }}

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

  before -> MM_Static, cstatic, CStatic {{
    if (is_equal) {
      MM_Static obj = (MM_Static) history.peek();
      Object temp87 = obj.get_cstatic();
      if(temp87==null) { is_equal = false; return; }
      history.push(temp87);
    }
  }}
  after -> MM_Static, cstatic, CStatic {{
    if (is_equal) history.pop();
  }}

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

  before -> MM_Abstract, cabstract, CAbstract {{
    if (is_equal) {
      MM_Abstract obj = (MM_Abstract) history.peek();
      Object temp88 = obj.get_cabstract();
      if(temp88==null) { is_equal = false; return; }
      history.push(temp88);
    }
  }}
  after -> MM_Abstract, cabstract, CAbstract {{
    if (is_equal) history.pop();
  }}

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

  before -> MM_Final, cfinal, CFinal {{
    if (is_equal) {
      MM_Final obj = (MM_Final) history.peek();
      Object temp89 = obj.get_cfinal();
      if(temp89==null) { is_equal = false; return; }
      history.push(temp89);
    }
  }}
  after -> MM_Final, cfinal, CFinal {{
    if (is_equal) history.pop();
  }}

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

  before -> MM_Native, cnative, CNative {{
    if (is_equal) {
      MM_Native obj = (MM_Native) history.peek();
      Object temp90 = obj.get_cnative();
      if(temp90==null) { is_equal = false; return; }
      history.push(temp90);
    }
  }}
  after -> MM_Native, cnative, CNative {{
    if (is_equal) history.pop();
  }}

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

  before -> MM_Synchronized, csynchronized, CSynchronized {{
    if (is_equal) {
      MM_Synchronized obj = (MM_Synchronized) history.peek();
      Object temp91 = obj.get_csynchronized();
      if(temp91==null) { is_equal = false; return; }
      history.push(temp91);
    }
  }}
  after -> MM_Synchronized, csynchronized, CSynchronized {{
    if (is_equal) history.pop();
  }}

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

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

  before -> A_Block, block, Block {{
    if (is_equal) {
      A_Block obj = (A_Block) history.peek();
      Object temp92 = obj.get_block();
      if(temp92==null) { is_equal = false; return; }
      history.push(temp92);
    }
  }}
  after -> A_Block, block, Block {{
    if (is_equal) history.pop();
  }}

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

  before -> A_SemiColon, semicolon, SemiColon {{
    if (is_equal) {
      A_SemiColon obj = (A_SemiColon) history.peek();
      Object temp93 = obj.get_semicolon();
      if(temp93==null) { is_equal = false; return; }
      history.push(temp93);
    }
  }}
  after -> A_SemiColon, semicolon, SemiColon {{
    if (is_equal) history.pop();
  }}

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

  before -> MethodDeclarator, identifier, Identifier {{
    if (is_equal) {
      MethodDeclarator obj = (MethodDeclarator) history.peek();
      Object temp94 = obj.get_identifier();
      if(temp94==null) { is_equal = false; return; }
      history.push(temp94);
    }
  }}
  after -> MethodDeclarator, identifier, Identifier {{
    if (is_equal) history.pop();
  }}

  before -> MethodDeclarator, formalparameters, FormalParameters {{
    if (is_equal) {
      MethodDeclarator obj = (MethodDeclarator) history.peek();
      Object temp95 = obj.get_formalparameters();
      if(temp95==null) { is_equal = false; return; }
      history.push(temp95);
    }
  }}
  after -> MethodDeclarator, formalparameters, FormalParameters {{
    if (is_equal) history.pop();
  }}

  before -> MethodDeclarator, squarebrackets, SquareBrackets {{
    if (is_equal) {
      MethodDeclarator obj = (MethodDeclarator) history.peek();
      Object temp96 = obj.get_squarebrackets();
      if(temp96==null) { is_equal = false; return; }
      history.push(temp96);
    }
  }}
  after -> MethodDeclarator, squarebrackets, SquareBrackets {{
    if (is_equal) history.pop();
  }}

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

  before -> FormalParameters, formalparameterlist, FormalParameterList {{
    if (is_equal) {
      FormalParameters obj = (FormalParameters) history.peek();
      Object temp97 = obj.get_formalparameterlist();
      if(temp97==null) { is_equal = false; return; }
      history.push(temp97);
    }
  }}
  after -> FormalParameters, formalparameterlist, FormalParameterList {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> FormalParameter, cfinal, CFinal {{
    if (is_equal) {
      FormalParameter obj = (FormalParameter) history.peek();
      Object temp99 = obj.get_cfinal();
      if(temp99==null) { is_equal = false; return; }
      history.push(temp99);
    }
  }}
  after -> FormalParameter, cfinal, CFinal {{
    if (is_equal) history.pop();
  }}

  before -> FormalParameter, type, Type {{
    if (is_equal) {
      FormalParameter obj = (FormalParameter) history.peek();
      Object temp100 = obj.get_type();
      if(temp100==null) { is_equal = false; return; }
      history.push(temp100);
    }
  }}
  after -> FormalParameter, type, Type {{
    if (is_equal) history.pop();
  }}

  before -> FormalParameter, variabledeclaratorid, VariableDeclaratorId {{
    if (is_equal) {
      FormalParameter obj = (FormalParameter) history.peek();
      Object temp101 = obj.get_variabledeclaratorid();
      if(temp101==null) { is_equal = false; return; }
      history.push(temp101);
    }
  }}
  after -> FormalParameter, variabledeclaratorid, VariableDeclaratorId {{
    if (is_equal) history.pop();
  }}

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

  before -> ConstructorDeclaration, constructormodifier, ConstructorModifier {{
    if (is_equal) {
      ConstructorDeclaration obj = (ConstructorDeclaration) history.peek();
      Object temp102 = obj.get_constructormodifier();
      if(temp102==null) { is_equal = false; return; }
      history.push(temp102);
    }
  }}
  after -> ConstructorDeclaration, constructormodifier, ConstructorModifier {{
    if (is_equal) history.pop();
  }}

  before -> ConstructorDeclaration, identifier, Identifier {{
    if (is_equal) {
      ConstructorDeclaration obj = (ConstructorDeclaration) history.peek();
      Object temp103 = obj.get_identifier();
      if(temp103==null) { is_equal = false; return; }
      history.push(temp103);
    }
  }}
  after -> ConstructorDeclaration, identifier, Identifier {{
    if (is_equal) history.pop();
  }}

  before -> ConstructorDeclaration, formalparameters, FormalParameters {{
    if (is_equal) {
      ConstructorDeclaration obj = (ConstructorDeclaration) history.peek();
      Object temp104 = obj.get_formalparameters();
      if(temp104==null) { is_equal = false; return; }
      history.push(temp104);
    }
  }}
  after -> ConstructorDeclaration, formalparameters, FormalParameters {{
    if (is_equal) history.pop();
  }}

  before -> ConstructorDeclaration, namelist, NameList {{
    if (is_equal) {
      ConstructorDeclaration obj = (ConstructorDeclaration) history.peek();
      Object temp105 = obj.get_namelist();
      if(temp105==null) { is_equal = false; return; }
      history.push(temp105);
    }
  }}
  after -> ConstructorDeclaration, namelist, NameList {{
    if (is_equal) history.pop();
  }}

  before -> ConstructorDeclaration, explicitconstructorinvocation, ExplicitConstructorInvocation {{
    if (is_equal) {
      ConstructorDeclaration obj = (ConstructorDeclaration) history.peek();
      Object temp106 = obj.get_explicitconstructorinvocation();
      if(temp106==null) { is_equal = false; return; }
      history.push(temp106);
    }
  }}
  after -> ConstructorDeclaration, explicitconstructorinvocation, ExplicitConstructorInvocation {{
    if (is_equal) history.pop();
  }}

  before -> ConstructorDeclaration, blockstatements, BlockStatements {{
    if (is_equal) {
      ConstructorDeclaration obj = (ConstructorDeclaration) history.peek();
      Object temp107 = obj.get_blockstatements();
      if(temp107==null) { is_equal = false; return; }
      history.push(temp107);
    }
  }}
  after -> ConstructorDeclaration, blockstatements, BlockStatements {{
    if (is_equal) history.pop();
  }}

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

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

  before -> CSM_Public, cpublic, CPublic {{
    if (is_equal) {
      CSM_Public obj = (CSM_Public) history.peek();
      Object temp108 = obj.get_cpublic();
      if(temp108==null) { is_equal = false; return; }
      history.push(temp108);
    }
  }}
  after -> CSM_Public, cpublic, CPublic {{
    if (is_equal) history.pop();
  }}

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

  before -> CSM_Protected, cprotected, CProtected {{
    if (is_equal) {
      CSM_Protected obj = (CSM_Protected) history.peek();
      Object temp109 = obj.get_cprotected();
      if(temp109==null) { is_equal = false; return; }
      history.push(temp109);
    }
  }}
  after -> CSM_Protected, cprotected, CProtected {{
    if (is_equal) history.pop();
  }}

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

  before -> CSM_Private, cprivate, CPrivate {{
    if (is_equal) {
      CSM_Private obj = (CSM_Private) history.peek();
      Object temp110 = obj.get_cprivate();
      if(temp110==null) { is_equal = false; return; }
      history.push(temp110);
    }
  }}
  after -> CSM_Private, cprivate, CPrivate {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> ThisConsInvoc, arguments, Arguments {{
    if (is_equal) {
      ThisConsInvoc obj = (ThisConsInvoc) history.peek();
      Object temp112 = obj.get_arguments();
      if(temp112==null) { is_equal = false; return; }
      history.push(temp112);
    }
  }}
  after -> ThisConsInvoc, arguments, Arguments {{
    if (is_equal) history.pop();
  }}

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

  before -> SuperConsInvoc, primaryexpression, PrimaryExpression {{
    if (is_equal) {
      SuperConsInvoc obj = (SuperConsInvoc) history.peek();
      Object temp113 = obj.get_primaryexpression();
      if(temp113==null) { is_equal = false; return; }
      history.push(temp113);
    }
  }}
  after -> SuperConsInvoc, primaryexpression, PrimaryExpression {{
    if (is_equal) history.pop();
  }}

  before -> SuperConsInvoc, arguments, Arguments {{
    if (is_equal) {
      SuperConsInvoc obj = (SuperConsInvoc) history.peek();
      Object temp114 = obj.get_arguments();
      if(temp114==null) { is_equal = false; return; }
      history.push(temp114);
    }
  }}
  after -> SuperConsInvoc, arguments, Arguments {{
    if (is_equal) history.pop();
  }}

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

  before -> Initializer, cstatic, CStatic {{
    if (is_equal) {
      Initializer obj = (Initializer) history.peek();
      Object temp115 = obj.get_cstatic();
      if(temp115==null) { is_equal = false; return; }
      history.push(temp115);
    }
  }}
  after -> Initializer, cstatic, CStatic {{
    if (is_equal) history.pop();
  }}

  before -> Initializer, block, Block {{
    if (is_equal) {
      Initializer obj = (Initializer) history.peek();
      Object temp116 = obj.get_block();
      if(temp116==null) { is_equal = false; return; }
      history.push(temp116);
    }
  }}
  after -> Initializer, block, Block {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

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

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

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

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

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

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

  before -> Type, typealt, TypeAlt {{
    if (is_equal) {
      Type obj = (Type) history.peek();
      Object temp117 = obj.get_typealt();
      if(temp117==null) { is_equal = false; return; }
      history.push(temp117);
    }
  }}
  after -> Type, typealt, TypeAlt {{
    if (is_equal) history.pop();
  }}

  before -> Type, squarebrackets, SquareBrackets {{
    if (is_equal) {
      Type obj = (Type) history.peek();
      Object temp118 = obj.get_squarebrackets();
      if(temp118==null) { is_equal = false; return; }
      history.push(temp118);
    }
  }}
  after -> Type, squarebrackets, SquareBrackets {{
    if (is_equal) history.pop();
  }}

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

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

  before -> TName, name, Name {{
    if (is_equal) {
      TName obj = (TName) history.peek();
      Object temp119 = obj.get_name();
      if(temp119==null) { is_equal = false; return; }
      history.push(temp119);
    }
  }}
  after -> TName, name, Name {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  before -> E_Assignment, assignment, Assignment {{
    if (is_equal) {
      E_Assignment obj = (E_Assignment) history.peek();
      Object temp124 = obj.get_assignment();
      if(temp124==null) { is_equal = false; return; }
      history.push(temp124);
    }
  }}
  after -> E_Assignment, assignment, Assignment {{
    if (is_equal) history.pop();
  }}

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

  before -> Assignment, primaryexpression, PrimaryExpression {{
    if (is_equal) {
      Assignment obj = (Assignment) history.peek();
      Object temp125 = obj.get_primaryexpression();
      if(temp125==null) { is_equal = false; return; }
      history.push(temp125);
    }
  }}
  after -> Assignment, primaryexpression, PrimaryExpression {{
    if (is_equal) history.pop();
  }}

  before -> Assignment, assignmentoperator, AssignmentOperator {{
    if (is_equal) {
      Assignment obj = (Assignment) history.peek();
      Object temp126 = obj.get_assignmentoperator();
      if(temp126==null) { is_equal = false; return; }
      history.push(temp126);
    }
  }}
  after -> Assignment, assignmentoperator, AssignmentOperator {{
    if (is_equal) history.pop();
  }}

  before -> Assignment, expression, Expression {{
    if (is_equal) {
      Assignment obj = (Assignment) history.peek();
      Object temp127 = obj.get_expression();
      if(temp127==null) { is_equal = false; return; }
      history.push(temp127);
    }
  }}
  after -> Assignment, expression, Expression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  before -> ConditionalExpression, conditionalorexpression, ConditionalOrExpression {{
    if (is_equal) {
      ConditionalExpression obj = (ConditionalExpression) history.peek();
      Object temp128 = obj.get_conditionalorexpression();
      if(temp128==null) { is_equal = false; return; }
      history.push(temp128);
    }
  }}
  after -> ConditionalExpression, conditionalorexpression, ConditionalOrExpression {{
    if (is_equal) history.pop();
  }}

  before -> ConditionalExpression, ternexp, TernExp {{
    if (is_equal) {
      ConditionalExpression obj = (ConditionalExpression) history.peek();
      Object temp129 = obj.get_ternexp();
      if(temp129==null) { is_equal = false; return; }
      history.push(temp129);
    }
  }}
  after -> ConditionalExpression, ternexp, TernExp {{
    if (is_equal) history.pop();
  }}

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

  before -> TernExp, expression, Expression {{
    if (is_equal) {
      TernExp obj = (TernExp) history.peek();
      Object temp130 = obj.get_expression();
      if(temp130==null) { is_equal = false; return; }
      history.push(temp130);
    }
  }}
  after -> TernExp, expression, Expression {{
    if (is_equal) history.pop();
  }}

  before -> TernExp, conditionalexpression, ConditionalExpression {{
    if (is_equal) {
      TernExp obj = (TernExp) history.peek();
      Object temp131 = obj.get_conditionalexpression();
      if(temp131==null) { is_equal = false; return; }
      history.push(temp131);
    }
  }}
  after -> TernExp, conditionalexpression, ConditionalExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

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

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

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

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

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

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

  before -> EqualityExpression, instanceofexpression, InstanceOfExpression {{
    if (is_equal) {
      EqualityExpression obj = (EqualityExpression) history.peek();
      Object temp137 = obj.get_instanceofexpression();
      if(temp137==null) { is_equal = false; return; }
      history.push(temp137);
    }
  }}
  after -> EqualityExpression, instanceofexpression, InstanceOfExpression {{
    if (is_equal) history.pop();
  }}

  before -> EqualityExpression, rhsequalityexpression, RHSEqualityExpression {{
    if (is_equal) {
      EqualityExpression obj = (EqualityExpression) history.peek();
      Object temp138 = obj.get_rhsequalityexpression();
      if(temp138==null) { is_equal = false; return; }
      history.push(temp138);
    }
  }}
  after -> EqualityExpression, rhsequalityexpression, RHSEqualityExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> RInstanceOfExpression, eqnoteq, EqNotEq {{
    if (is_equal) {
      RInstanceOfExpression obj = (RInstanceOfExpression) history.peek();
      Object temp140 = obj.get_eqnoteq();
      if(temp140==null) { is_equal = false; return; }
      history.push(temp140);
    }
  }}
  after -> RInstanceOfExpression, eqnoteq, EqNotEq {{
    if (is_equal) history.pop();
  }}

  before -> RInstanceOfExpression, instanceofexpression, InstanceOfExpression {{
    if (is_equal) {
      RInstanceOfExpression obj = (RInstanceOfExpression) history.peek();
      Object temp141 = obj.get_instanceofexpression();
      if(temp141==null) { is_equal = false; return; }
      history.push(temp141);
    }
  }}
  after -> RInstanceOfExpression, instanceofexpression, InstanceOfExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> InstanceOfExpression, relationalexpression, RelationalExpression {{
    if (is_equal) {
      InstanceOfExpression obj = (InstanceOfExpression) history.peek();
      Object temp142 = obj.get_relationalexpression();
      if(temp142==null) { is_equal = false; return; }
      history.push(temp142);
    }
  }}
  after -> InstanceOfExpression, relationalexpression, RelationalExpression {{
    if (is_equal) history.pop();
  }}

  before -> InstanceOfExpression, type, Type {{
    if (is_equal) {
      InstanceOfExpression obj = (InstanceOfExpression) history.peek();
      Object temp143 = obj.get_type();
      if(temp143==null) { is_equal = false; return; }
      history.push(temp143);
    }
  }}
  after -> InstanceOfExpression, type, Type {{
    if (is_equal) history.pop();
  }}

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

  before -> RelationalExpression, shiftexpression, ShiftExpression {{
    if (is_equal) {
      RelationalExpression obj = (RelationalExpression) history.peek();
      Object temp144 = obj.get_shiftexpression();
      if(temp144==null) { is_equal = false; return; }
      history.push(temp144);
    }
  }}
  after -> RelationalExpression, shiftexpression, ShiftExpression {{
    if (is_equal) history.pop();
  }}

  before -> RelationalExpression, rhsrelationalexpression, RHSRelationalExpression {{
    if (is_equal) {
      RelationalExpression obj = (RelationalExpression) history.peek();
      Object temp145 = obj.get_rhsrelationalexpression();
      if(temp145==null) { is_equal = false; return; }
      history.push(temp145);
    }
  }}
  after -> RelationalExpression, rhsrelationalexpression, RHSRelationalExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

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

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

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

  before -> RShiftExpression, compexp, CompExp {{
    if (is_equal) {
      RShiftExpression obj = (RShiftExpression) history.peek();
      Object temp147 = obj.get_compexp();
      if(temp147==null) { is_equal = false; return; }
      history.push(temp147);
    }
  }}
  after -> RShiftExpression, compexp, CompExp {{
    if (is_equal) history.pop();
  }}

  before -> RShiftExpression, shiftexpression, ShiftExpression {{
    if (is_equal) {
      RShiftExpression obj = (RShiftExpression) history.peek();
      Object temp148 = obj.get_shiftexpression();
      if(temp148==null) { is_equal = false; return; }
      history.push(temp148);
    }
  }}
  after -> RShiftExpression, shiftexpression, ShiftExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> ShiftExpression, additiveexpression, AdditiveExpression {{
    if (is_equal) {
      ShiftExpression obj = (ShiftExpression) history.peek();
      Object temp149 = obj.get_additiveexpression();
      if(temp149==null) { is_equal = false; return; }
      history.push(temp149);
    }
  }}
  after -> ShiftExpression, additiveexpression, AdditiveExpression {{
    if (is_equal) history.pop();
  }}

  before -> ShiftExpression, rhsshiftexpression, RHSShiftExpression {{
    if (is_equal) {
      ShiftExpression obj = (ShiftExpression) history.peek();
      Object temp150 = obj.get_rhsshiftexpression();
      if(temp150==null) { is_equal = false; return; }
      history.push(temp150);
    }
  }}
  after -> ShiftExpression, rhsshiftexpression, RHSShiftExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> RAdditiveExpression, shiftexp, ShiftExp {{
    if (is_equal) {
      RAdditiveExpression obj = (RAdditiveExpression) history.peek();
      Object temp152 = obj.get_shiftexp();
      if(temp152==null) { is_equal = false; return; }
      history.push(temp152);
    }
  }}
  after -> RAdditiveExpression, shiftexp, ShiftExp {{
    if (is_equal) history.pop();
  }}

  before -> RAdditiveExpression, additiveexpression, AdditiveExpression {{
    if (is_equal) {
      RAdditiveExpression obj = (RAdditiveExpression) history.peek();
      Object temp153 = obj.get_additiveexpression();
      if(temp153==null) { is_equal = false; return; }
      history.push(temp153);
    }
  }}
  after -> RAdditiveExpression, additiveexpression, AdditiveExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

  before -> AdditiveExpression, multiplicativeexpression, MultiplicativeExpression {{
    if (is_equal) {
      AdditiveExpression obj = (AdditiveExpression) history.peek();
      Object temp154 = obj.get_multiplicativeexpression();
      if(temp154==null) { is_equal = false; return; }
      history.push(temp154);
    }
  }}
  after -> AdditiveExpression, multiplicativeexpression, MultiplicativeExpression {{
    if (is_equal) history.pop();
  }}

  before -> AdditiveExpression, rhsadditiveexpression, RHSAdditiveExpression {{
    if (is_equal) {
      AdditiveExpression obj = (AdditiveExpression) history.peek();
      Object temp155 = obj.get_rhsadditiveexpression();
      if(temp155==null) { is_equal = false; return; }
      history.push(temp155);
    }
  }}
  after -> AdditiveExpression, rhsadditiveexpression, RHSAdditiveExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> RMultiplicativeExpression, addexp, AddExp {{
    if (is_equal) {
      RMultiplicativeExpression obj = (RMultiplicativeExpression) history.peek();
      Object temp157 = obj.get_addexp();
      if(temp157==null) { is_equal = false; return; }
      history.push(temp157);
    }
  }}
  after -> RMultiplicativeExpression, addexp, AddExp {{
    if (is_equal) history.pop();
  }}

  before -> RMultiplicativeExpression, multiplicativeexpression, MultiplicativeExpression {{
    if (is_equal) {
      RMultiplicativeExpression obj = (RMultiplicativeExpression) history.peek();
      Object temp158 = obj.get_multiplicativeexpression();
      if(temp158==null) { is_equal = false; return; }
      history.push(temp158);
    }
  }}
  after -> RMultiplicativeExpression, multiplicativeexpression, MultiplicativeExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> MultiplicativeExpression, unaryexpression, UnaryExpression {{
    if (is_equal) {
      MultiplicativeExpression obj = (MultiplicativeExpression) history.peek();
      Object temp159 = obj.get_unaryexpression();
      if(temp159==null) { is_equal = false; return; }
      history.push(temp159);
    }
  }}
  after -> MultiplicativeExpression, unaryexpression, UnaryExpression {{
    if (is_equal) history.pop();
  }}

  before -> MultiplicativeExpression, rhsmultiplicativeexpression, RHSMultiplicativeExpression {{
    if (is_equal) {
      MultiplicativeExpression obj = (MultiplicativeExpression) history.peek();
      Object temp160 = obj.get_rhsmultiplicativeexpression();
      if(temp160==null) { is_equal = false; return; }
      history.push(temp160);
    }
  }}
  after -> MultiplicativeExpression, rhsmultiplicativeexpression, RHSMultiplicativeExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> RUnaryExpression, mulexp, MulExp {{
    if (is_equal) {
      RUnaryExpression obj = (RUnaryExpression) history.peek();
      Object temp162 = obj.get_mulexp();
      if(temp162==null) { is_equal = false; return; }
      history.push(temp162);
    }
  }}
  after -> RUnaryExpression, mulexp, MulExp {{
    if (is_equal) history.pop();
  }}

  before -> RUnaryExpression, unaryexpression, UnaryExpression {{
    if (is_equal) {
      RUnaryExpression obj = (RUnaryExpression) history.peek();
      Object temp163 = obj.get_unaryexpression();
      if(temp163==null) { is_equal = false; return; }
      history.push(temp163);
    }
  }}
  after -> RUnaryExpression, unaryexpression, UnaryExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

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

  before -> U_PreIncrementExpression, preincrementexpression, PreIncrementExpression {{
    if (is_equal) {
      U_PreIncrementExpression obj = (U_PreIncrementExpression) history.peek();
      Object temp164 = obj.get_preincrementexpression();
      if(temp164==null) { is_equal = false; return; }
      history.push(temp164);
    }
  }}
  after -> U_PreIncrementExpression, preincrementexpression, PreIncrementExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> U_PreDecrementExpression, predecrementexpression, PreDecrementExpression {{
    if (is_equal) {
      U_PreDecrementExpression obj = (U_PreDecrementExpression) history.peek();
      Object temp165 = obj.get_predecrementexpression();
      if(temp165==null) { is_equal = false; return; }
      history.push(temp165);
    }
  }}
  after -> U_PreDecrementExpression, predecrementexpression, PreDecrementExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> PlusMinusUnaryExpression, addexp, AddExp {{
    if (is_equal) {
      PlusMinusUnaryExpression obj = (PlusMinusUnaryExpression) history.peek();
      Object temp166 = obj.get_addexp();
      if(temp166==null) { is_equal = false; return; }
      history.push(temp166);
    }
  }}
  after -> PlusMinusUnaryExpression, addexp, AddExp {{
    if (is_equal) history.pop();
  }}

  before -> PlusMinusUnaryExpression, unaryexpression, UnaryExpression {{
    if (is_equal) {
      PlusMinusUnaryExpression obj = (PlusMinusUnaryExpression) history.peek();
      Object temp167 = obj.get_unaryexpression();
      if(temp167==null) { is_equal = false; return; }
      history.push(temp167);
    }
  }}
  after -> PlusMinusUnaryExpression, unaryexpression, UnaryExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> PreIncrementExpression, primaryexpression, PrimaryExpression {{
    if (is_equal) {
      PreIncrementExpression obj = (PreIncrementExpression) history.peek();
      Object temp168 = obj.get_primaryexpression();
      if(temp168==null) { is_equal = false; return; }
      history.push(temp168);
    }
  }}
  after -> PreIncrementExpression, primaryexpression, PrimaryExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> PreDecrementExpression, primaryexpression, PrimaryExpression {{
    if (is_equal) {
      PreDecrementExpression obj = (PreDecrementExpression) history.peek();
      Object temp169 = obj.get_primaryexpression();
      if(temp169==null) { is_equal = false; return; }
      history.push(temp169);
    }
  }}
  after -> PreDecrementExpression, primaryexpression, PrimaryExpression {{
    if (is_equal) history.pop();
  }}

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

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

  before -> UN_PostfixExpression, postfixexpression, PostfixExpression {{
    if (is_equal) {
      UN_PostfixExpression obj = (UN_PostfixExpression) history.peek();
      Object temp170 = obj.get_postfixexpression();
      if(temp170==null) { is_equal = false; return; }
      history.push(temp170);
    }
  }}
  after -> UN_PostfixExpression, postfixexpression, PostfixExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> NUnaryExpression, notplusminus, NotPlusMinus {{
    if (is_equal) {
      NUnaryExpression obj = (NUnaryExpression) history.peek();
      Object temp171 = obj.get_notplusminus();
      if(temp171==null) { is_equal = false; return; }
      history.push(temp171);
    }
  }}
  after -> NUnaryExpression, notplusminus, NotPlusMinus {{
    if (is_equal) history.pop();
  }}

  before -> NUnaryExpression, unaryexpression, UnaryExpression {{
    if (is_equal) {
      NUnaryExpression obj = (NUnaryExpression) history.peek();
      Object temp172 = obj.get_unaryexpression();
      if(temp172==null) { is_equal = false; return; }
      history.push(temp172);
    }
  }}
  after -> NUnaryExpression, unaryexpression, UnaryExpression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> PostfixExpression, primaryexpression, PrimaryExpression {{
    if (is_equal) {
      PostfixExpression obj = (PostfixExpression) history.peek();
      Object temp173 = obj.get_primaryexpression();
      if(temp173==null) { is_equal = false; return; }
      history.push(temp173);
    }
  }}
  after -> PostfixExpression, primaryexpression, PrimaryExpression {{
    if (is_equal) history.pop();
  }}

  before -> PostfixExpression, paddexp, PAddExp {{
    if (is_equal) {
      PostfixExpression obj = (PostfixExpression) history.peek();
      Object temp174 = obj.get_paddexp();
      if(temp174==null) { is_equal = false; return; }
      history.push(temp174);
    }
  }}
  after -> PostfixExpression, paddexp, PAddExp {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

  before -> CastExpSimple, type, Type {{
    if (is_equal) {
      CastExpSimple obj = (CastExpSimple) history.peek();
      Object temp175 = obj.get_type();
      if(temp175==null) { is_equal = false; return; }
      history.push(temp175);
    }
  }}
  after -> CastExpSimple, type, Type {{
    if (is_equal) history.pop();
  }}

  before -> CastExpSimple, unaryexpression, UnaryExpression {{
    if (is_equal) {
      CastExpSimple obj = (CastExpSimple) history.peek();
      Object temp176 = obj.get_unaryexpression();
      if(temp176==null) { is_equal = false; return; }
      history.push(temp176);
    }
  }}
  after -> CastExpSimple, unaryexpression, UnaryExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> CastExpCmplx, type, Type {{
    if (is_equal) {
      CastExpCmplx obj = (CastExpCmplx) history.peek();
      Object temp177 = obj.get_type();
      if(temp177==null) { is_equal = false; return; }
      history.push(temp177);
    }
  }}
  after -> CastExpCmplx, type, Type {{
    if (is_equal) history.pop();
  }}

  before -> CastExpCmplx, unaryexpressionnotplusminus, UnaryExpressionNotPlusMinus {{
    if (is_equal) {
      CastExpCmplx obj = (CastExpCmplx) history.peek();
      Object temp178 = obj.get_unaryexpressionnotplusminus();
      if(temp178==null) { is_equal = false; return; }
      history.push(temp178);
    }
  }}
  after -> CastExpCmplx, unaryexpressionnotplusminus, UnaryExpressionNotPlusMinus {{
    if (is_equal) history.pop();
  }}

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

  before -> PrimaryExpression, primaryprefix, PrimaryPrefix {{
    if (is_equal) {
      PrimaryExpression obj = (PrimaryExpression) history.peek();
      Object temp179 = obj.get_primaryprefix();
      if(temp179==null) { is_equal = false; return; }
      history.push(temp179);
    }
  }}
  after -> PrimaryExpression, primaryprefix, PrimaryPrefix {{
    if (is_equal) history.pop();
  }}

  before -> PrimaryExpression, primarysuffixes, PrimarySuffixes {{
    if (is_equal) {
      PrimaryExpression obj = (PrimaryExpression) history.peek();
      Object temp180 = obj.get_primarysuffixes();
      if(temp180==null) { is_equal = false; return; }
      history.push(temp180);
    }
  }}
  after -> PrimaryExpression, primarysuffixes, PrimarySuffixes {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> PName, name, Name {{
    if (is_equal) {
      PName obj = (PName) history.peek();
      Object temp182 = obj.get_name();
      if(temp182==null) { is_equal = false; return; }
      history.push(temp182);
    }
  }}
  after -> PName, name, Name {{
    if (is_equal) history.pop();
  }}

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

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

  before -> SuperPP, identifier, Identifier {{
    if (is_equal) {
      SuperPP obj = (SuperPP) history.peek();
      Object temp183 = obj.get_identifier();
      if(temp183==null) { is_equal = false; return; }
      history.push(temp183);
    }
  }}
  after -> SuperPP, identifier, Identifier {{
    if (is_equal) history.pop();
  }}

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

  before -> ParenExp, expression, Expression {{
    if (is_equal) {
      ParenExp obj = (ParenExp) history.peek();
      Object temp184 = obj.get_expression();
      if(temp184==null) { is_equal = false; return; }
      history.push(temp184);
    }
  }}
  after -> ParenExp, expression, Expression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> dotAlloc, allocationexpression, AllocationExpression {{
    if (is_equal) {
      dotAlloc obj = (dotAlloc) history.peek();
      Object temp185 = obj.get_allocationexpression();
      if(temp185==null) { is_equal = false; return; }
      history.push(temp185);
    }
  }}
  after -> dotAlloc, allocationexpression, AllocationExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> dotParam, expression, Expression {{
    if (is_equal) {
      dotParam obj = (dotParam) history.peek();
      Object temp186 = obj.get_expression();
      if(temp186==null) { is_equal = false; return; }
      history.push(temp186);
    }
  }}
  after -> dotParam, expression, Expression {{
    if (is_equal) history.pop();
  }}

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

  before -> dotIdent, identifier, Identifier {{
    if (is_equal) {
      dotIdent obj = (dotIdent) history.peek();
      Object temp187 = obj.get_identifier();
      if(temp187==null) { is_equal = false; return; }
      history.push(temp187);
    }
  }}
  after -> dotIdent, identifier, Identifier {{
    if (is_equal) history.pop();
  }}

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

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

  before Integer_literal {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp188 = host.get_integer();
    Object temp189 = ((Integer_literal) obj).get_integer();
    if(temp188 == null && temp189 == null) {}
    else if(temp188 == null ||
            temp189 == null ||
            !temp188.equals(temp189)) { is_equal = false; return; }
  }}

  before Floating_point_literal {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp190 = host.get_f();
    Object temp191 = ((Floating_point_literal) obj).get_f();
    if(temp190 == null && temp191 == null) {}
    else if(temp190 == null ||
            temp191 == null ||
            !temp190.equals(temp191)) { is_equal = false; return; }
  }}

  before Character_literal {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp192 = host.get_character();
    Object temp193 = ((Character_literal) obj).get_character();
    if(temp192 == null && temp193 == null) {}
    else if(temp192 == null ||
            temp193 == null ||
            !temp192.equals(temp193)) { is_equal = false; return; }
  }}

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

  before BooleanLiteral {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) return;
    Object temp196 = host.get_b();
    Object temp197 = ((BooleanLiteral) obj).get_b();
    if(temp196 == null && temp197 == null) {}
    else if(temp196 == null ||
            temp197 == null ||
            !temp196.equals(temp197)) { is_equal = false; return; }
  }}

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

  before -> Arguments, argumentlist, ArgumentList {{
    if (is_equal) {
      Arguments obj = (Arguments) history.peek();
      Object temp198 = obj.get_argumentlist();
      if(temp198==null) { is_equal = false; return; }
      history.push(temp198);
    }
  }}
  after -> Arguments, argumentlist, ArgumentList {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> newCmplx, primitivetype, PrimitiveType {{
    if (is_equal) {
      newCmplx obj = (newCmplx) history.peek();
      Object temp200 = obj.get_primitivetype();
      if(temp200==null) { is_equal = false; return; }
      history.push(temp200);
    }
  }}
  after -> newCmplx, primitivetype, PrimitiveType {{
    if (is_equal) history.pop();
  }}

  before -> newCmplx, arraydimensions, ArrayDimensions {{
    if (is_equal) {
      newCmplx obj = (newCmplx) history.peek();
      Object temp201 = obj.get_arraydimensions();
      if(temp201==null) { is_equal = false; return; }
      history.push(temp201);
    }
  }}
  after -> newCmplx, arraydimensions, ArrayDimensions {{
    if (is_equal) history.pop();
  }}

  before -> newCmplx, arrayinitializer, ArrayInitializer {{
    if (is_equal) {
      newCmplx obj = (newCmplx) history.peek();
      Object temp202 = obj.get_arrayinitializer();
      if(temp202==null) { is_equal = false; return; }
      history.push(temp202);
    }
  }}
  after -> newCmplx, arrayinitializer, ArrayInitializer {{
    if (is_equal) history.pop();
  }}

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

  before -> newSimple, name, Name {{
    if (is_equal) {
      newSimple obj = (newSimple) history.peek();
      Object temp203 = obj.get_name();
      if(temp203==null) { is_equal = false; return; }
      history.push(temp203);
    }
  }}
  after -> newSimple, name, Name {{
    if (is_equal) history.pop();
  }}

  before -> newSimple, arralloc, ArrAlloc {{
    if (is_equal) {
      newSimple obj = (newSimple) history.peek();
      Object temp204 = obj.get_arralloc();
      if(temp204==null) { is_equal = false; return; }
      history.push(temp204);
    }
  }}
  after -> newSimple, arralloc, ArrAlloc {{
    if (is_equal) history.pop();
  }}

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

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

  before -> ArrAllocIni, arraydimensions, ArrayDimensions {{
    if (is_equal) {
      ArrAllocIni obj = (ArrAllocIni) history.peek();
      Object temp205 = obj.get_arraydimensions();
      if(temp205==null) { is_equal = false; return; }
      history.push(temp205);
    }
  }}
  after -> ArrAllocIni, arraydimensions, ArrayDimensions {{
    if (is_equal) history.pop();
  }}

  before -> ArrAllocIni, arrayinitializer, ArrayInitializer {{
    if (is_equal) {
      ArrAllocIni obj = (ArrAllocIni) history.peek();
      Object temp206 = obj.get_arrayinitializer();
      if(temp206==null) { is_equal = false; return; }
      history.push(temp206);
    }
  }}
  after -> ArrAllocIni, arrayinitializer, ArrayInitializer {{
    if (is_equal) history.pop();
  }}

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

  before -> ArrAllocClas, arguments, Arguments {{
    if (is_equal) {
      ArrAllocClas obj = (ArrAllocClas) history.peek();
      Object temp207 = obj.get_arguments();
      if(temp207==null) { is_equal = false; return; }
      history.push(temp207);
    }
  }}
  after -> ArrAllocClas, arguments, Arguments {{
    if (is_equal) history.pop();
  }}

  before -> ArrAllocClas, classbody, ClassBody {{
    if (is_equal) {
      ArrAllocClas obj = (ArrAllocClas) history.peek();
      Object temp208 = obj.get_classbody();
      if(temp208==null) { is_equal = false; return; }
      history.push(temp208);
    }
  }}
  after -> ArrAllocClas, classbody, ClassBody {{
    if (is_equal) history.pop();
  }}

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

  before -> ArrayDimensions, arraydimension, ArrayDimension {{
    if (is_equal) {
      ArrayDimensions obj = (ArrayDimensions) history.peek();
      Object temp209 = obj.get_arraydimension();
      if(temp209==null) { is_equal = false; return; }
      history.push(temp209);
    }
  }}
  after -> ArrayDimensions, arraydimension, ArrayDimension {{
    if (is_equal) history.pop();
  }}

  before -> ArrayDimensions, squarebrackets, SquareBrackets {{
    if (is_equal) {
      ArrayDimensions obj = (ArrayDimensions) history.peek();
      Object temp210 = obj.get_squarebrackets();
      if(temp210==null) { is_equal = false; return; }
      history.push(temp210);
    }
  }}
  after -> ArrayDimensions, squarebrackets, SquareBrackets {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> DimExp, expression, Expression {{
    if (is_equal) {
      DimExp obj = (DimExp) history.peek();
      Object temp212 = obj.get_expression();
      if(temp212==null) { is_equal = false; return; }
      history.push(temp212);
    }
  }}
  after -> DimExp, expression, Expression {{
    if (is_equal) history.pop();
  }}

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

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

  before -> StatementExpressionSe, statementexpression, StatementExpression {{
    if (is_equal) {
      StatementExpressionSe obj = (StatementExpressionSe) history.peek();
      Object temp213 = obj.get_statementexpression();
      if(temp213==null) { is_equal = false; return; }
      history.push(temp213);
    }
  }}
  after -> StatementExpressionSe, statementexpression, StatementExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> LabeledStatement, identifier, Identifier {{
    if (is_equal) {
      LabeledStatement obj = (LabeledStatement) history.peek();
      Object temp214 = obj.get_identifier();
      if(temp214==null) { is_equal = false; return; }
      history.push(temp214);
    }
  }}
  after -> LabeledStatement, identifier, Identifier {{
    if (is_equal) history.pop();
  }}

  before -> LabeledStatement, statement, Statement {{
    if (is_equal) {
      LabeledStatement obj = (LabeledStatement) history.peek();
      Object temp215 = obj.get_statement();
      if(temp215==null) { is_equal = false; return; }
      history.push(temp215);
    }
  }}
  after -> LabeledStatement, statement, Statement {{
    if (is_equal) history.pop();
  }}

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

  before -> SBlock, block, Block {{
    if (is_equal) {
      SBlock obj = (SBlock) history.peek();
      Object temp216 = obj.get_block();
      if(temp216==null) { is_equal = false; return; }
      history.push(temp216);
    }
  }}
  after -> SBlock, block, Block {{
    if (is_equal) history.pop();
  }}

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

  before -> Block, blockstatements, BlockStatements {{
    if (is_equal) {
      Block obj = (Block) history.peek();
      Object temp217 = obj.get_blockstatements();
      if(temp217==null) { is_equal = false; return; }
      history.push(temp217);
    }
  }}
  after -> Block, blockstatements, BlockStatements {{
    if (is_equal) history.pop();
  }}

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

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

  before -> BStatement, statement, Statement {{
    if (is_equal) {
      BStatement obj = (BStatement) history.peek();
      Object temp218 = obj.get_statement();
      if(temp218==null) { is_equal = false; return; }
      history.push(temp218);
    }
  }}
  after -> BStatement, statement, Statement {{
    if (is_equal) history.pop();
  }}

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

  before -> LocVarDecl, localvariabledeclaration, LocalVariableDeclaration {{
    if (is_equal) {
      LocVarDecl obj = (LocVarDecl) history.peek();
      Object temp219 = obj.get_localvariabledeclaration();
      if(temp219==null) { is_equal = false; return; }
      history.push(temp219);
    }
  }}
  after -> LocVarDecl, localvariabledeclaration, LocalVariableDeclaration {{
    if (is_equal) history.pop();
  }}

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

  before -> LocalVariableDeclaration, cfinal, CFinal {{
    if (is_equal) {
      LocalVariableDeclaration obj = (LocalVariableDeclaration) history.peek();
      Object temp220 = obj.get_cfinal();
      if(temp220==null) { is_equal = false; return; }
      history.push(temp220);
    }
  }}
  after -> LocalVariableDeclaration, cfinal, CFinal {{
    if (is_equal) history.pop();
  }}

  before -> LocalVariableDeclaration, type, Type {{
    if (is_equal) {
      LocalVariableDeclaration obj = (LocalVariableDeclaration) history.peek();
      Object temp221 = obj.get_type();
      if(temp221==null) { is_equal = false; return; }
      history.push(temp221);
    }
  }}
  after -> LocalVariableDeclaration, type, Type {{
    if (is_equal) history.pop();
  }}

  before -> LocalVariableDeclaration, variabledeclarators, VariableDeclarators {{
    if (is_equal) {
      LocalVariableDeclaration obj = (LocalVariableDeclaration) history.peek();
      Object temp222 = obj.get_variabledeclarators();
      if(temp222==null) { is_equal = false; return; }
      history.push(temp222);
    }
  }}
  after -> LocalVariableDeclaration, variabledeclarators, VariableDeclarators {{
    if (is_equal) history.pop();
  }}

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

  before -> EmptyStatement, semicolon, SemiColon {{
    if (is_equal) {
      EmptyStatement obj = (EmptyStatement) history.peek();
      Object temp223 = obj.get_semicolon();
      if(temp223==null) { is_equal = false; return; }
      history.push(temp223);
    }
  }}
  after -> EmptyStatement, semicolon, SemiColon {{
    if (is_equal) history.pop();
  }}

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

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

  before -> SE_PreIncrementExpression, preincrementexpression, PreIncrementExpression {{
    if (is_equal) {
      SE_PreIncrementExpression obj = (SE_PreIncrementExpression) history.peek();
      Object temp224 = obj.get_preincrementexpression();
      if(temp224==null) { is_equal = false; return; }
      history.push(temp224);
    }
  }}
  after -> SE_PreIncrementExpression, preincrementexpression, PreIncrementExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> SE_PreDecrementExpression, predecrementexpression, PreDecrementExpression {{
    if (is_equal) {
      SE_PreDecrementExpression obj = (SE_PreDecrementExpression) history.peek();
      Object temp225 = obj.get_predecrementexpression();
      if(temp225==null) { is_equal = false; return; }
      history.push(temp225);
    }
  }}
  after -> SE_PreDecrementExpression, predecrementexpression, PreDecrementExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> SE_Assignment, assignment, Assignment {{
    if (is_equal) {
      SE_Assignment obj = (SE_Assignment) history.peek();
      Object temp226 = obj.get_assignment();
      if(temp226==null) { is_equal = false; return; }
      history.push(temp226);
    }
  }}
  after -> SE_Assignment, assignment, Assignment {{
    if (is_equal) history.pop();
  }}

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

  before -> SE_PostfixExpression, postfixexpression, PostfixExpression {{
    if (is_equal) {
      SE_PostfixExpression obj = (SE_PostfixExpression) history.peek();
      Object temp227 = obj.get_postfixexpression();
      if(temp227==null) { is_equal = false; return; }
      history.push(temp227);
    }
  }}
  after -> SE_PostfixExpression, postfixexpression, PostfixExpression {{
    if (is_equal) history.pop();
  }}

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

  before -> SwitchStatement, expression, Expression {{
    if (is_equal) {
      SwitchStatement obj = (SwitchStatement) history.peek();
      Object temp228 = obj.get_expression();
      if(temp228==null) { is_equal = false; return; }
      history.push(temp228);
    }
  }}
  after -> SwitchStatement, expression, Expression {{
    if (is_equal) history.pop();
  }}

  before -> SwitchStatement, caseblocks, CaseBlocks {{
    if (is_equal) {
      SwitchStatement obj = (SwitchStatement) history.peek();
      Object temp229 = obj.get_caseblocks();
      if(temp229==null) { is_equal = false; return; }
      history.push(temp229);
    }
  }}
  after -> SwitchStatement, caseblocks, CaseBlocks {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> CaseBlock, switchlabel, SwitchLabel {{
    if (is_equal) {
      CaseBlock obj = (CaseBlock) history.peek();
      Object temp231 = obj.get_switchlabel();
      if(temp231==null) { is_equal = false; return; }
      history.push(temp231);
    }
  }}
  after -> CaseBlock, switchlabel, SwitchLabel {{
    if (is_equal) history.pop();
  }}

  before -> CaseBlock, blockstatements, BlockStatements {{
    if (is_equal) {
      CaseBlock obj = (CaseBlock) history.peek();
      Object temp232 = obj.get_blockstatements();
      if(temp232==null) { is_equal = false; return; }
      history.push(temp232);
    }
  }}
  after -> CaseBlock, blockstatements, BlockStatements {{
    if (is_equal) history.pop();
  }}

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

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

  before -> CaseExp, expression, Expression {{
    if (is_equal) {
      CaseExp obj = (CaseExp) history.peek();
      Object temp233 = obj.get_expression();
      if(temp233==null) { is_equal = false; return; }
      history.push(temp233);
    }
  }}
  after -> CaseExp, expression, Expression {{
    if (is_equal) history.pop();
  }}

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

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

  before -> IfStatement, expression, Expression {{
    if (is_equal) {
      IfStatement obj = (IfStatement) history.peek();
      Object temp234 = obj.get_expression();
      if(temp234==null) { is_equal = false; return; }
      history.push(temp234);
    }
  }}
  after -> IfStatement, expression, Expression {{
    if (is_equal) history.pop();
  }}

  before -> IfStatement, statement, Statement {{
    if (is_equal) {
      IfStatement obj = (IfStatement) history.peek();
      Object temp235 = obj.get_statement();
      if(temp235==null) { is_equal = false; return; }
      history.push(temp235);
    }
  }}
  after -> IfStatement, statement, Statement {{
    if (is_equal) history.pop();
  }}

  before -> IfStatement, elseStmt, Statement {{
    if (is_equal) {
      IfStatement obj = (IfStatement) history.peek();
      Object temp236 = obj.get_elseStmt();
      if(temp236==null) { is_equal = false; return; }
      history.push(temp236);
    }
  }}
  after -> IfStatement, elseStmt, Statement {{
    if (is_equal) history.pop();
  }}

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

  before -> WhileStatement, expression, Expression {{
    if (is_equal) {
      WhileStatement obj = (WhileStatement) history.peek();
      Object temp237 = obj.get_expression();
      if(temp237==null) { is_equal = false; return; }
      history.push(temp237);
    }
  }}
  after -> WhileStatement, expression, Expression {{
    if (is_equal) history.pop();
  }}

  before -> WhileStatement, statement, Statement {{
    if (is_equal) {
      WhileStatement obj = (WhileStatement) history.peek();
      Object temp238 = obj.get_statement();
      if(temp238==null) { is_equal = false; return; }
      history.push(temp238);
    }
  }}
  after -> WhileStatement, statement, Statement {{
    if (is_equal) history.pop();
  }}

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

  before -> DoStatement, statement, Statement {{
    if (is_equal) {
      DoStatement obj = (DoStatement) history.peek();
      Object temp239 = obj.get_statement();
      if(temp239==null) { is_equal = false; return; }
      history.push(temp239);
    }
  }}
  after -> DoStatement, statement, Statement {{
    if (is_equal) history.pop();
  }}

  before -> DoStatement, expression, Expression {{
    if (is_equal) {
      DoStatement obj = (DoStatement) history.peek();
      Object temp240 = obj.get_expression();
      if(temp240==null) { is_equal = false; return; }
      history.push(temp240);
    }
  }}
  after -> DoStatement, expression, Expression {{
    if (is_equal) history.pop();
  }}

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

  before -> ForStatement, forinitopt, ForInitOpt {{
    if (is_equal) {
      ForStatement obj = (ForStatement) history.peek();
      Object temp241 = obj.get_forinitopt();
      if(temp241==null) { is_equal = false; return; }
      history.push(temp241);
    }
  }}
  after -> ForStatement, forinitopt, ForInitOpt {{
    if (is_equal) history.pop();
  }}

  before -> ForStatement, forevalexp, ForEvalExp {{
    if (is_equal) {
      ForStatement obj = (ForStatement) history.peek();
      Object temp242 = obj.get_forevalexp();
      if(temp242==null) { is_equal = false; return; }
      history.push(temp242);
    }
  }}
  after -> ForStatement, forevalexp, ForEvalExp {{
    if (is_equal) history.pop();
  }}

  before -> ForStatement, forupdate, ForUpdate {{
    if (is_equal) {
      ForStatement obj = (ForStatement) history.peek();
      Object temp243 = obj.get_forupdate();
      if(temp243==null) { is_equal = false; return; }
      history.push(temp243);
    }
  }}
  after -> ForStatement, forupdate, ForUpdate {{
    if (is_equal) history.pop();
  }}

  before -> ForStatement, statement, Statement {{
    if (is_equal) {
      ForStatement obj = (ForStatement) history.peek();
      Object temp244 = obj.get_statement();
      if(temp244==null) { is_equal = false; return; }
      history.push(temp244);
    }
  }}
  after -> ForStatement, statement, Statement {{
    if (is_equal) history.pop();
  }}

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

  before -> ForInitOpt, forinit, ForInit {{
    if (is_equal) {
      ForInitOpt obj = (ForInitOpt) history.peek();
      Object temp245 = obj.get_forinit();
      if(temp245==null) { is_equal = false; return; }
      history.push(temp245);
    }
  }}
  after -> ForInitOpt, forinit, ForInit {{
    if (is_equal) history.pop();
  }}

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

  before -> ForEvalExp, expression, Expression {{
    if (is_equal) {
      ForEvalExp obj = (ForEvalExp) history.peek();
      Object temp246 = obj.get_expression();
      if(temp246==null) { is_equal = false; return; }
      history.push(temp246);
    }
  }}
  after -> ForEvalExp, expression, Expression {{
    if (is_equal) history.pop();
  }}

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

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

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

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

  before -> ForUpdate, statementexpressionlist, StatementExpressionList {{
    if (is_equal) {
      ForUpdate obj = (ForUpdate) history.peek();
      Object temp248 = obj.get_statementexpressionlist();
      if(temp248==null) { is_equal = false; return; }
      history.push(temp248);
    }
  }}
  after -> ForUpdate, statementexpressionlist, StatementExpressionList {{
    if (is_equal) history.pop();
  }}

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

  before -> BreakStatement, identifier, Identifier {{
    if (is_equal) {
      BreakStatement obj = (BreakStatement) history.peek();
      Object temp249 = obj.get_identifier();
      if(temp249==null) { is_equal = false; return; }
      history.push(temp249);
    }
  }}
  after -> BreakStatement, identifier, Identifier {{
    if (is_equal) history.pop();
  }}

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

  before -> ContinueStatement, identifier, Identifier {{
    if (is_equal) {
      ContinueStatement obj = (ContinueStatement) history.peek();
      Object temp250 = obj.get_identifier();
      if(temp250==null) { is_equal = false; return; }
      history.push(temp250);
    }
  }}
  after -> ContinueStatement, identifier, Identifier {{
    if (is_equal) history.pop();
  }}

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

  before -> ReturnStatement, expression, Expression {{
    if (is_equal) {
      ReturnStatement obj = (ReturnStatement) history.peek();
      Object temp251 = obj.get_expression();
      if(temp251==null) { is_equal = false; return; }
      history.push(temp251);
    }
  }}
  after -> ReturnStatement, expression, Expression {{
    if (is_equal) history.pop();
  }}

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

  before -> ThrowStatement, expression, Expression {{
    if (is_equal) {
      ThrowStatement obj = (ThrowStatement) history.peek();
      Object temp252 = obj.get_expression();
      if(temp252==null) { is_equal = false; return; }
      history.push(temp252);
    }
  }}
  after -> ThrowStatement, expression, Expression {{
    if (is_equal) history.pop();
  }}

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

  before -> SynchronizedStatement, expression, Expression {{
    if (is_equal) {
      SynchronizedStatement obj = (SynchronizedStatement) history.peek();
      Object temp253 = obj.get_expression();
      if(temp253==null) { is_equal = false; return; }
      history.push(temp253);
    }
  }}
  after -> SynchronizedStatement, expression, Expression {{
    if (is_equal) history.pop();
  }}

  before -> SynchronizedStatement, block, Block {{
    if (is_equal) {
      SynchronizedStatement obj = (SynchronizedStatement) history.peek();
      Object temp254 = obj.get_block();
      if(temp254==null) { is_equal = false; return; }
      history.push(temp254);
    }
  }}
  after -> SynchronizedStatement, block, Block {{
    if (is_equal) history.pop();
  }}

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

  before -> TryStatement, block, Block {{
    if (is_equal) {
      TryStatement obj = (TryStatement) history.peek();
      Object temp255 = obj.get_block();
      if(temp255==null) { is_equal = false; return; }
      history.push(temp255);
    }
  }}
  after -> TryStatement, block, Block {{
    if (is_equal) history.pop();
  }}

  before -> TryStatement, catchblocks, CatchBlocks {{
    if (is_equal) {
      TryStatement obj = (TryStatement) history.peek();
      Object temp256 = obj.get_catchblocks();
      if(temp256==null) { is_equal = false; return; }
      history.push(temp256);
    }
  }}
  after -> TryStatement, catchblocks, CatchBlocks {{
    if (is_equal) history.pop();
  }}

  before -> TryStatement, finalblock, Block {{
    if (is_equal) {
      TryStatement obj = (TryStatement) history.peek();
      Object temp257 = obj.get_finalblock();
      if(temp257==null) { is_equal = false; return; }
      history.push(temp257);
    }
  }}
  after -> TryStatement, finalblock, Block {{
    if (is_equal) history.pop();
  }}

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

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

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

  before -> CatchBlock, formalparameter, FormalParameter {{
    if (is_equal) {
      CatchBlock obj = (CatchBlock) history.peek();
      Object temp259 = obj.get_formalparameter();
      if(temp259==null) { is_equal = false; return; }
      history.push(temp259);
    }
  }}
  after -> CatchBlock, formalparameter, FormalParameter {{
    if (is_equal) history.pop();
  }}

  before -> CatchBlock, block, Block {{
    if (is_equal) {
      CatchBlock obj = (CatchBlock) history.peek();
      Object temp260 = obj.get_block();
      if(temp260==null) { is_equal = false; return; }
      history.push(temp260);
    }
  }}
  after -> CatchBlock, block, Block {{
    if (is_equal) history.pop();
  }}

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

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

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

  before Main {{
    Object obj = history.peek();
    is_equal = is_equal && obj.getClass().equals(host.getClass());
    if(!is_equal) 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 temp261 = host.get_copy();
    Object temp262 = ((CopyVisitor) obj).get_copy();
    if(temp261 == null && temp262 == null) {}
    else if(temp261 == null ||
            temp262 == null ||
            !temp261.equals(temp262)) { 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 -> Nonempty_ImportDeclarations, it, ImportDeclaration {{
    if (is_equal) {
      Nonempty_ImportDeclarations obj = (Nonempty_ImportDeclarations) history.peek();
      Object temp263 = obj.get_it();
      if(temp263==null) { is_equal = false; return; }
      history.push(temp263);
    }
  }}
  after -> Nonempty_ImportDeclarations, it, ImportDeclaration {{
    if (is_equal) history.pop();
  }}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  return boolean {{ is_equal }}
}