code: func (p *Parser) parseValues() (sets.String, error) {
  	tok, lit := p.consume(Values)
  	if tok != OpenParToken {
  		return nil, fmt.Errorf("found '%s' expected: '('", lit)
  	}
  	tok, lit = p.lookahead(Values)
  	switch tok {
  	case IdentifierToken, CommaToken:
  		s, err := p.parseIdentifiersList() // handles general cases
  		if err != nil {
  			return s, err
  		}
  		if tok, _ = p.consume(Values); tok != ClosedParToken {
  			return nil, fmt.Errorf("found '%s', expected: ')'", lit)
  		}
  		return s, nil
  	case ClosedParToken: // handles "()"
  		p.consume(Values)
  		return sets.NewString(""), nil
  	default:
  		return nil, fmt.Errorf("found '%s', expected: ',', ')' or identifier", lit)
  	}
  }
docs: // parseValues parses the values for set based matching (x,y,z)