type exprParser … type val … type exprToken … var exprTokens … func init() { … } // matchexpr parses and evaluates the //go:build expression x. func matchexpr(x string) (matched bool, err error) { … } // parse parses an expression, including binary operators at precedence >= prec. func (p *exprParser) parse(prec int) val { … } // not is the prefix parser for a ! token. func (p *exprParser) not() val { … } // paren is the prefix parser for a ( token. func (p *exprParser) paren() val { … } // next advances the parser to the next token, // leaving the token in p.t. func (p *exprParser) next() { … } func validtag(c byte) bool { … }