func()

in src/ct/parser/parser.go [234:282]


func (p *Parser) parseComparison() *Item {
	n := UnknownItem()
	t := p.next()

	negate := false
	if t.typ == tokenNegation && p.peek(1).typ != tokenEOF {
		negate = true
		t = p.next()
	}

	switch {
	case containsStrings(t.val, "<", "=") || containsStrings(t.val, "≤"):
		n.Set(itemComparison, "≤")
	case containsStrings(t.val, "<"):
		n.Set(itemComparison, "<")
	case containsStrings(t.val, ">", "=") || containsStrings(t.val, "≥"):
		n.Set(itemComparison, "≥")
	case containsStrings(t.val, ">"):
		n.Set(itemComparison, ">")
	case t.typ == tokenLessComparison:
		switch {
		case p.hasEqual():
			n.Set(itemComparison, "≤")
		default:
			n.Set(itemComparison, "<")
		}
	case t.typ == tokenGreaterComparison:
		switch {
		case p.hasEqual():
			n.Set(itemComparison, "≥")
		default:
			n.Set(itemComparison, ">")
		}
	case t.typ == tokenComparison:
		switch t.val {
		case "between":
			n.Set(itemRange, t.val)
		case "at":
			if p.peek(1).val == "least" {
				p.next()
				n.Set(itemComparison, "≥")
			}
		}
	}
	if negate {
		n = n.Negate()
	}
	return n
}