Ones written in the same language they are being used on are called bootstrappers, and on the fly ones are called Just In Time.
Ones that operate on purely theoretical systems are the "stage" type, and in general they can be created by devices that accept a Backus-Naur Form file as input. "Wide" ones iterate on their intermediate output and are more complex than the (*) "single pass" type. One type can be improved by doing a "pre-JIT" to reduce start-up delay, and a common stage in their operation uses a parse tree to for syntactical analysis. Ones written in the same language they are being used on are called bootstrappers, and on the fly ones are called Just In Time. Sometimes outputting to data that can be read by a virtual machine, for 10 points, name these objects that convert source code into target machine code.
Ones that operate on purely theoretical systems are the "stage" type, and in general they can be created by devices that accept a Backus-Naur Form file as input.
{Compiler} (prompt on "Just in Time Compiler" during the pre-JIT sentence)