Metaprogramming

Metaprogramming is a technique in which programs can treat other programs as their data - the program can read, generate, analyze, transform other programs, and even modify itself while running.