code: static Tree parse(String spec) throws IllegalArgumentException {
          Reader r = new Reader(spec);
          Tree t = new Tree();
          list(r, t);
          r.expect(Token.EOF);
          return t;
      }
docs: Simple recursive descent parser: