>>108
コンパイラはともかく、インタプリタは「機械語に変換」しなくても実行できる。最も簡単な
実装にするなら

仮想機械の状態 (program counter, stack pointer, stack frame pointer, ...) の宣言

無限ループ {
  プログラムカウンタのアドレスから命令を 1 つ読み込む
  プログラムカウンタを 1 増やす
  switch (命令) {
  case 実行終了:
    exit;
  case ジャンプ命令:
    仮想機械のプログラムカウンタを変更
    break;
  case 加算命令:
    スタックから値をふたと取り出して、足したものをスタックに積む
    break;
  ...
  }
}

って感じ。俺は「UNIX プログラミング環境」を読んで基本的な仕組みを勉強したけど、
ちと書籍が古いよな。今なら Web を検索すれば、適当なサンプルの一つや二つは
見つかるかと。

あとコンパイラも、ネイティブコードを出力する以外に

1. 中間コード(インタプリタ用のコード)を出力する
2. アセンブラを出力して、オブジェクトコードへの変換やリンクは、既存のツールを
 使いまわす

という手がある。