code: func (t itemType) String() string {
  	for k, v := range builtinIdents {
  		if v == t {
  			return k
  		}
  	}
  	for k, v := range arithmeticItemsBySymbol {
  		if v == t {
  			return k
  		}
  	}
  	var r, ok = map[itemType]string{
  		itemEOF:              "<eof>",
  		itemEquals:           "=",
  		itemError:            "<error>",
  		itemText:             "<text>",
  		itemLeftDelim:        "{",
  		itemRightDelim:       "}",
  		itemRightDelimEnd:    "/}",
  		itemIdent:            "<ident>",
  		itemDollarIdent:      "<$ident>",
  		itemDotIdent:         "<.ident>",
  		itemQuestionDotIdent: "<?.ident>",
  		itemDotIndex:         "<.N>",
  		itemQuestionDotIndex: "<?.N>",
  		itemLeftBracket:      "[",
  		itemRightBracket:     "]",
  		itemQuestionKey:      "?[",
  	}[t]
  	if ok {
  		return r
  	}
  	return fmt.Sprintf("item(%d)", t)
  }
docs: // String converts the itemType into its source string.
  // It is fantastically inefficient and should only be used for error messages.