あなたが扱っている言語が Lisp などの言語であると仮定しますが、それは問題ではありません。(C++、Java、Ruby、何でもかまいません。)
さて、あなたは Lisp の実装を持っています。この実装を Imp と呼びます (IMPlementation の略で、勝手に作った名前です)。Imp はそれ自体がプログラムであるため、コンピューターで実行できます。ここで、Lisp で書かれた Lisp 用の独自の実装を作成し、それを Circ と呼びます。Circ は、Lisp コードからコンパイルされた (または必要に応じて解釈された) プログラムです。コードは、ファイルを読み取り、解析 (意味のあるデータに処理) し、そのデータに対して何らかの処理を行うように記述されています。これは何ですか?Circ の場合は、データを実行します。
しかし、どのようにそうするのですか?
単純なケースとして、Circ が読み取って解析するコードが、数学を実行して結果を出力するような単純なものであるとします。Circ はコードを使いやすいデータに処理し (Lisp のような言語の場合、始めるのは簡単ですが、それは要点を超えています)、それを格納します。Lisp では数値を計算するコードを書くことができるので、Circ 用に書かれたコードも Lisp で書かれているので、そうすることができます。処理されたデータは、いくつかの追加処理コードに差し込まれます...そしてほら! 数値結果が出ました!次に、Circ プログラムが結果を出力します。
単純な数学よりも複雑なものでも同じことができます。実際、言語の他の側面をコンパイル/解釈できます。これらの「その他の側面」を十分に書き、それらをつなぎ合わせると、Lisp で書かれた Lisp 用のコンパイラが得られます。
コンパイラは Imp によってコンパイルされるため、自分のマシンで実行できます。これで完了です。