福野泰介の一日一創 - create every day

IchigoJam BASICでコンピューターを操る楽しみを知り、マシン語でその正体を知ったら、人類の英知コンパイラを学び、広がり続けるプログラミング言語、開発ツールの海へと出港しましょう!

コンパイラとは人間とマシン語をつなぐ翻訳者。やってほしいこと(アルゴリズム)を0と1の並びへと変換してくれるソフトウェアのこと。

福井高専電子情報工学科にもコンパイラという授業がありました。講義を単に受けるのではなく、自分でコンパイラを作りながら学ぶのが近道で楽しいのでオススメです。

C言語はその代表格。その機能限定版を実際のソースコードを読んだり、改造するのが近道です。自分だけのプログラミング言語づくりも簡単に楽しめる、コンパクトな実装「ci0 - ミニCインタプリタ」を発見。Macで動くように編集してみました。(src on GitHub

$ cat test0-hello.c int main() { println("Hello World!"); return 0; } $ ./ci0 test0-hello.c Hello World! $ ./ci0 -trace test0-hello.c 0: int ************** execute ***************** entryPoint = 2 2: entry 3: addsp int 0 4: push str "Hello World!" 5: call str println Hello World! 6: addsp int 1 7: push int 0 8: ret

このコンパイラ、字句解析、構文解析、VMまで含めて512行ととっても短いのが特徴です!
for文に対応していないなど、言語仕様は極力削ってあるので、欲しい構文を好きなように追加することも楽しめます。

VMはJavaVMやWebAssmeblyと同様のスタックマシン(mrubyはレジスタマシンなのでちょっと違う)になっていて、中間コードを見たり(-codeオプション)、実行内容を見たり(-trace)もできます。

WebAssemblyのビットコードを出力するようにして、ブラウザ上の開発環境にしてみたり、IchigoJamで動くCコンパイラに挑戦するのもおもしろそう。

links
- ミニCインタプリタ (言語処理入門 by Minoru Hatada 氏)
- 高専でなぜC言語を学ぶのか? IchigoJamマシン語生成プログラム c4ij で作る、C言語版かわくだり
- オールマシン語かわくだり - API対応 IchigoJam 1.3.2β12
- mruby VM level 1 in 2KB / 実用最小限VMとIchigoJam BASICと動かす組込Ruby

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像