To automatically analyze the code, the analyses must be implemented as software programs. As analyses become increasingly complex, implementing them using imperative and interrogative programming is oftentimes cumbersome. Consequently, the understanding, testing and reuse of analyses is severely hampered. In this paper we identify a set of key mechanisms that are involved in the implementation of any static analysis: navigation, selection, set arithmetics, filtering and property aggregation. We show that neither of the aforementioned approaches offers a simple support for these mechanisms and, as a result, an undesirable overhead of complexity is added to the implementation of most analyses. The paper introduces SAIL, a language designed to offer a proper support to a simplify writing of analyses. In order to validate the expressiveness of SAIL the paper provides a comprehensive comparison with the other two approaches.