code: func (p *Parser) parseIdentifier(cur *ListNode) error {
  	var r rune
  	for {
  		r = p.next()
  		if isTerminator(r) {
  			p.backup()
  			break
  		}
  	}
  	value := p.consumeText()
  
  	if isBool(value) {
  		v, err := strconv.ParseBool(value)
  		if err != nil {
  			return fmt.Errorf("can not parse bool '%s': %s", value, err.Error())
  		}
  
  		cur.append(newBool(v))
  	} else {
  		cur.append(newIdentifier(value))
  	}
  
  	return p.parseInsideAction(cur)
  }
docs: // parseIdentifier scans build-in keywords, like "range" "end"