An uncompiler or recompiler as it is also called. (Re)creates high level code from the generated low level or MachineCode. JAD is a popular decompiler for JavaLanguage For the limits of such an approach see the remarks on BidirectionalCompiler CategoryCompilers