The Intermediate form could be “machine code” for an abstract or virtual machine. Usually, the abstract machine selected, closely models the constructs and operations of the High Level language being processed. P-code used with many PASCAL compilers and the Bytecode used by Java compilers are good examples.
The abstract machine models primitive operations and data types in a High Level language. Usually, the instruction set of the abstract machine consists of single-address instructions.
Although defining an abstract machine for a particular High Level language is relatively easy, defining a single abstract machine for a number of diverse languages, e.g. C, Java, Lisp and Prolog, is a difficult task.