This lays out the specturm of compilers and interpreters, which are kind of the two ideal forms. For people who wish to get into details, realize it is a kind of spectrum that modern languages use.
For example, compilation is done over many phases, producing intermediate results. Any of these could in theory be run on a virtual machine, or interpreter, or they could be compiled to machine code as needed.
It's even possible to interpret machine code, as Intel did with some of their Intel based Android tablets (since the machine code was expecting an Arm processor). The Valgrind toolset is also an interpreter, and really amazing profiler, for machine code.
What's important, and Vaidehi does a good job explaining this, are the different possibilities. Understand what transformations code goes through, and how it is run.
We're a place where coders share, stay up-to-date and grow their careers.
We strive for transparency and don't collect excess data.