Racket Abstract Interpretation (RAI), is a code analysis and generation system built around a domain specific language (DSL).
#lang s-exp rai/stream
The system allows for multiple abstract interpretations (AI) of programs expressed in the DSL. Some interpretations included are
Scheme code for interactive exploration
Dependency-free C code to run on small target systems
linear(ized) transfer function for frequency analysis
Racklog program for logic analysis
Symbolic mathematical expressions
DSL programs are represented as abstract syntax, parameterized by a structure describing the implementation of the language primitives. Writing a new interpretation involves the execution of a program parameterized by such a description, often in some form of context.
Program interpretations can be constructed to be composable, i.e. an iterpretation can transform a RAI program into another RAI program.