protected SgfInstance constructGame() {
    SgfInstance game = new SgfInstance();
    Move lastMove = game.getRoot();
    Stack<Move> parents = new Stack<Move>();

    while (index < contents.length()) {
      char c = getChar();
      if (c == '(') {
        if (parents.size() == 0) {
          if (nextChar() == ';') {
            parents.push(lastMove.addProperties(getProperties()));
            parents.push(lastMove);
          } else {
            // should throw parse error
          }
        } else {
          parents.push(lastMove);
        }

      } else if (c == ')' ) {
        lastMove = parents.pop();

      } else if (c == ';') {
        lastMove = lastMove.createChild(getProperties()); //swap moves

      } else {
        //throw UnknownTokenException
      }
      index++;
    }
    return game;
  }