Static analysis tools come in wide variety, having to do with differences in:
- Purpose of the tool (find dead variables? find subscript errors? determine dynamic variable type?)
- Method to achieve it (heuristic? conservative algorithm? theorem prover?)
- Target languages and properties analyzed
- Representations processed (text, ASTs, byte code, mixtures)
- User annotations to help guide the analysis (when facing Turing-hard analyses, sometimes a hint is huge help)
- User interface, IDE integration, and reporting
- ...
This is far too much to learn about by reading some implementation. You virtually never learn anything significant by reading source code. Worse, 90% of the source code handles junk that is unrelated to the above issues ("open file", "parse lexeme", "print unicode string").
You are better off getting a textbook on program analysis and reading that to understand at least some of the above issues.