The bootstrapping problem deals with writing one of these in the same language it is then dealing with.  
Optimizations that can be performed by these devices include peephole optimizations that replace many instructions with one instruction, and they are also capable of loop unrolling and code motion.  The bootstrapping problem deals with writing one of these in the same language it is then dealing with.  They usually operate in steps including performing a lexical analysis, and the intermediate code that they generate is independent of the underlying machine architecture.  For 10 points, identify these constructs which translates source code to object code in order to create runnable target programs.
Optimizations that can be performed by these devices include peephole optimizations that replace many instructions with one instruction, and they are also capable of loop unrolling and code motion.  
{Compilers}