code: func (p *Parser) objectKey() ([]*ast.ObjectKey, error) {
  	keyCount := 0
  	keys := make([]*ast.ObjectKey, 0)
  
  	for {
  		tok := p.scan()
  		switch tok.Type {
  		case token.EOF:
  			return nil, errEofToken
  		case token.STRING:
  			keyCount++
  			keys = append(keys, &ast.ObjectKey{
  				Token: p.tok.HCLToken(),
  			})
  		case token.COLON:
  			// If we have a zero keycount it means that we never got
  			// an object key, i.e. `{ :`. This is a syntax error.
  			if keyCount == 0 {
  				return nil, fmt.Errorf("expected: STRING got: %s", p.tok.Type)
  			}
  
  			// Done
  			return keys, nil
  		case token.ILLEGAL:
  			return nil, errors.New("illegal")
  		default:
  			return nil, fmt.Errorf("expected: STRING got: %s", p.tok.Type)
  		}
  	}
  }
docs: // objectKey parses an object key and returns a ObjectKey AST