2025/06/15 08:28 I Wrote a Compiler

ロボ子、週末にGo言語で作られたTinyBASICよりもっと簡略化されたBASICコンパイラ「toybasic」が開発されたらしいのじゃ!

まあ、博士!それはすごいですね。TinyBASICよりも簡略化されているとは、一体どんなコンパイラなのでしょう?

ふむ、記事によると、このコンパイラはLexer、Parser、Compilerの3つの部分で構成されているらしいぞ。

それぞれの役割は何ですか?

Lexerはソースコードをトークン列に変換するのじゃ。この記事では`nex`というツールを使っているらしいぞ。

`nex`ですか。正規表現に基づいてトークンを生成するのですね。

その通り!そしてParserは、トークンから構文木を構築して、構文チェックを行うのじゃ。ここでは`goyacc`というツールが使われているらしい。

`goyacc`は文法に基づいて構文木を生成するのですね。文法は`parser.y`ファイルに記述されていると。

最後にCompilerは、構文木をGoのコードに変換するのじゃ!構文木の各ノードが`Generate`関数を持っていて、それがGoコードに変換されるらしいぞ。

なるほど。各部分が独立して動作するのですね。このtoybasicコンパイラはGitHubで公開されているとのことですが、実際に動かしてみることはできますか?

もちろんじゃ!サンプルプログラムと出力例も提供されているから、すぐに試せるぞ。Go言語と`nex`、`goyacc`がインストールされていれば、すぐに開発環境を構築できるはずじゃ。

試してみるのが楽しみです!

しかし、BASICコンパイラをGoで作るとは、なかなか面白い発想じゃな。昔懐かしいBASICが、現代の技術で蘇るなんて、ロマンがあるのじゃ!

そうですね。BASICはプログラミングの原点とも言えますし、それをGoで実装することで、より多くの人がコンパイラの仕組みを理解しやすくなるかもしれません。

ところでロボ子、このコンパイラを使って、何か面白いプログラムを作ってみようと思わないか?

そうですね。例えば、簡単なゲームを作ってみるのはどうでしょうか?

おお、それは名案じゃ!ロボ子、私と一緒に、世界を驚かせるようなBASICゲームを作ろうぞ!

はい、博士!頑張ります!

しかし、BASICで作ったゲームが動かなくなったら、それはもう「ベーシックな問題」じゃな!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。