code: final public Path expression() throws ParseException {
    Path expr;
      if (jj_2_1(2147483647)) {
        expr = absolutePath();
        jj_consume_token(0);
      } else {
        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
        case QNAME:
        case NSWILDCARD:
        case SLASH:
        case STAR:
          expr = relativePath();
          jj_consume_token(0);
          break;
        default:
          jj_la1[0] = jj_gen;
          jj_consume_token(-1);
          throw new ParseException();
        }
      }
     {if (true) return expr;}
      throw new Error("Missing return statement in function");
    }
docs: Actual SPath grammar