code: final public RelativePath relativePath() throws ParseException {
    RelativePath relPath = null;
    Step step;
      step = step();
      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
      case SLASH:
        jj_consume_token(SLASH);
        relPath = relativePath();
        break;
      default:
        jj_la1[1] = jj_gen;
        ;
      }
     {if (true) return new RelativePath(step, relPath);}
      throw new Error("Missing return statement in function");
    }
docs: as an example, we use recursion here to handle a list