code: func parseNameOrNameVal(rest string, d *Directive) (*Node, map[string]bool, error) {
  	words := parseWords(rest, d)
  	if len(words) == 0 {
  		return nil, nil, nil
  	}
  
  	var (
  		rootnode *Node
  		prevNode *Node
  	)
  	for i, word := range words {
  		node := &Node{}
  		node.Value = word
  		if i == 0 {
  			rootnode = node
  		} else {
  			prevNode.Next = node
  		}
  		prevNode = node
  	}
  
  	return rootnode, nil, nil
  }
docs: // parses a statement containing one or more keyword definition(s) and/or
  // value assignments, like `name1 name2= name3="" name4=value`.
  // Note that this is a stricter format than the old format of assignment,
  // allowed by parseNameVal(), in a way that this only allows assignment of the
  // form `keyword=[<value>]` like  `name2=`, `name3=""`, and `name4=value` above.
  // In addition, a keyword definition alone is of the form `keyword` like `name1`
  // above. And the assignments `name2=` and `name3=""` are equivalent and
  // assign an empty value to the respective keywords.