いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

インタプリタを作る(2)

 前、「インタプリタを作る」というタイトルで記事を1本書きました。続きです。「インタプリタ作る」ではありません。「インタプリタ作る」です。インタプリタというのは何なのかここでも簡単に説明しますが、前の記事もご覧ください。 

www.omoshiro-suugaku.com

コンピュータを動かすには何か言語が必要です。使うだけの人はそういう言語の存在は知らなくてもよいですが、誰かがそういう言語をこしらえ、その言語を使ってソフトウェア(アプリケーション、アプリ)を作らないとコンピュータは動いてくれないのです。その言語には大きく分けてインタプリタコンパイラの二種類があります。厳格に2つに分類することはできませんが、何となくの説明ならインタプリタは人間が書いたプログラムをコンピュータに理解できる命令に逐次、翻訳しながら実行するタイプの言語。コンパイラは一気にコンピュータ用の命令に翻訳してしまうタイプ。どちらも一長一短です。

 コンピュータ言語を使って何かソフトを書くのも面白いのですが、コンピュータ言語自体を作るのも面白いと思います。しかし例えば架空の言語ですが……

f:id:Inuosann:20200601175635p:plain
は「0 から99までの整数の総和を求める」の意味(のつもり)ですが、この5行のテキストをコンピュータに読ませて1 + 2 + 3 + …… + 99 を求めさせるのは相当大変だということは予想できるかと思います。電卓で人間が「1 + 2 + 3 + …… + 99」と打つのとはわけが違うのです。

 シューティングゲームをプログラミングしているとしましょう。敵の戦闘機がどう動くか、見てきれいな感じに、素早く、ときどき速さを変える、編隊を作る、などなどプログラマが全部決めなければなりません。これらは書いているコードの中で指定するわけですが、動きだけをいろいろに変えてみたいとか、プログラマでなくゲームで遊ぶ人がある程度自由に動きを変えられるようにしたいとか、そういうこともあるのです。例えば適当ですが「dir N, 300, 1」で「北向きに速さ300で1秒間動く」という意味に解釈してくれればありがたい! この部分だけを別のコマンドに変えれば動きが変わります。コードの他の部分は書き換えなくて済むし、見て分かりやすいし。しかし、こういう機能を入れようとするとすぐに一筋縄ではいかないことに気づきます。「dir N, 300, 1」みたいなコマンドをいくつも書き、それを順番に実行させる、要するに一種の言語を使えるようにしなければならないわけです。これを解決するのに必要なのがインタプリタコンパイラを作るための勉強なのです。

 ……というわけで久しぶりに簡単な言語を作ってみたいと思います。形になったらブログで紹介します。前はC++、C#で作りました。今回はPythonでやってみます。一応、言語を作るのは「自分で頑張って工夫すればなんとかなる」という感じではありません。勉強しないとダメ、という印象です。