Home - acieroid/scala-am GitHub Wiki

Scala-AM is a static analysis framework that focuses on modularity. It is composed of multiple components that can each be redefined and plugged together to form new static analyses. The two main components are the machine abstraction and the semantics:

  • The semantics define how a program has to be evaluated, in a small-step operational semantics fashion. It has to account for abstract values, i.e., values used in the program may not be concrete: instead of concrete values such as 1 and "foo", you have to work with values such as Int or [0-10], and String or {f,o}
  • The machine abstraction defines how to use the semantics to compute a program in an abstract manner, and how to model the stack.

This wiki contains a examples of analysis built using Scala-AM:

  • Unbound Variables in Lambda Calculus shows how to define semantics for a new language and how to build an analysis that detect accesses to unbound variables
  • Static Taint Analysis shows how to extend semantics provided with the framework to build a non-trivial analysis, and how to provide new lattice implementations.