code: func (t *tree) parseExprFirstTerm() ast.Node {
  	switch tok := t.next(); {
  	case isUnaryOp(tok):
  		return newUnaryOpNode(tok, t.parseExpr(precedence[tok.typ]))
  	case tok.typ == itemLeftParen:
  		n := t.parseExpr(0)
  		t.expect(itemRightParen, "soy expression")
  		return n
  	case isValue(tok):
  		return t.newValueNode(tok)
  	default:
  		t.unexpected(tok, "soy expression")
  	}
  	return nil
  }
docs: // Primary ->   "(" Expr ")"
  //            | u=UnaryOp PrecExpr(prec(u))
  //            | FunctionCall | DataRef | Global | ListLiteral | MapLiteral | Primitive