This paper shows how to construct static analyzers using tree automata and rewriting techniques. Starting from a term rewriting
system representing the operational semantics of the target programming language and given a program to analyze, we automatically
construct an over-approximation of the set of reachable terms, i.e. of the program states that can be reached. The approach
enables fast prototyping of static analyzers because modifying the analysis simply amounts to changing the set of rewrite
rules defining the approximation. A salient feature of this approach is that the approximation is correct by construction
and hence does not require an explicit correctness proof. To illustrate the framework proposed here on a realistic programming
language we instantiate it with the Java Virtual Machine semantics and perform class analysis on Java bytecode programs.