static final public TreeLocation Location() throws ParseException {
 /*@bgen(jjtree) Location */
  SimpleNode jjtn000 = new SimpleNode(JJTLOCATION);
  boolean jjtc000 = true;
  jjtree.openNodeScope(jjtn000);Token rel;
  TsurgeonPattern child;
    try {
      rel = jj_consume_token(LOCATION_RELATION);
      child = NodeSelection();
     jjtree.closeNodeScope(jjtn000, true);
     jjtc000 = false;
     {if (true) return new TreeLocation(rel.image, child);}
    } catch (Throwable jjte000) {
   if (jjtc000) {
     jjtree.clearNodeScope(jjtn000);
     jjtc000 = false;
   } else {
     jjtree.popNode();
   }
   if (jjte000 instanceof RuntimeException) {
     {if (true) throw (RuntimeException)jjte000;}
   }
   if (jjte000 instanceof ParseException) {
     {if (true) throw (ParseException)jjte000;}
   }
   {if (true) throw (Error)jjte000;}
    } finally {
   if (jjtc000) {
     jjtree.closeNodeScope(jjtn000, true);
   }
    }
    throw new Error("Missing return statement in function");
  }