はい、ドラゴンブックで説明されているテクニックを使用してインタープリターを作成できます。
とにかく字句解析器とパーサーが必要です。
他の人が指摘しているように、実際の実行を行うにはコードを書く必要がありますが、単純なインタープリターの場合、これはドラゴンブックで説明されている構文指向の変換と本質的に同じです。
それ以外はすべてオプションです。
パーサーから実行に直接スキップしたい場合は、スキップできます。これにより、非常に単純な言語ができあがります。これには、良い面も悪い面もあります。このような言語の例については、Tclを参照してください。
解析しながら各行を解釈したい場合は、それも可能です。これは、ほとんどのコマンドライン インタープリター (Unix シェル スクリプト、Microsoft の cmd.com および PowerShell) が行うことと、Python や Ruby などの言語の対話型の "REPL" (Read-Eval-Print-Loops) が行うことです。
「セマンティック アナライザー」は漠然としているように思えますが、ほとんどの種類の読み込み時の一貫性チェックを含める必要があるように思えます。これもオプションですが、インタープリターには古いゴミを一切取らず、プログラムとして実行しようとする利点があります...
「中間コード」も曖昧ですが、間違いなくオプションです。(Tcl のように) プログラム文字列から直接実行していない場合は、コードを読み込んだ後、そのコードを格納するための何らかの内部表現が必要です。一般的なオプションの 1 つは、内部ツリー構造から実行することです。これは、「中間コード」の生成とはほぼ間違いなく異なります。一方、「中間コード」を内部ツリー構造から多かれ少なかれ直接書き出すことができる場合は、内部構造を「中間コード」としてカウントすることもできます。
あなたが対処していない重要な問題があります。際立っているのは、名前をどのように扱いたいかということです。おそらく、プログラマーが独自の名前 (変数、関数など) を定義して使用できるようにする必要があるため、そのための何らかのメカニズムを実装する必要があります。
名前を正確にどのように処理するかは、言語の使いやすさと実装可能性に大きな影響を与える大きな設計上の決定です。実装の最も簡単なオプションは、単一のグローバル ハッシュ マップを使用して単一のグローバル名前空間を実装することですが、この選択にはよく知られたユーザビリティの問題があることに注意してください...