code: func (p *Parser) Parse() ([]Revisioner, error) {
  	var rev Revisioner
  	var revs []Revisioner
  	var tok token
  	var err error
  
  	for {
  		tok, _, err = p.scan()
  
  		if err != nil {
  			return nil, err
  		}
  
  		switch tok {
  		case at:
  			rev, err = p.parseAt()
  		case tilde:
  			rev, err = p.parseTilde()
  		case caret:
  			rev, err = p.parseCaret()
  		case colon:
  			rev, err = p.parseColon()
  		case eof:
  			err = p.validateFullRevision(&revs)
  
  			if err != nil {
  				return []Revisioner{}, err
  			}
  
  			return revs, nil
  		default:
  			p.unscan()
  			rev, err = p.parseRef()
  		}
  
  		if err != nil {
  			return []Revisioner{}, err
  		}
  
  		revs = append(revs, rev)
  	}
  }
docs: // Parse explode a revision string into revisioner chunks