Webで動く簡易コンパイラをつくってみた
プログラミングというと、多くの人は「すでに用意された言語を使うもの」だと考えます。 文法は決まっていて、書き方は固定されていて、「合わない」と感じても、どこかで折り合いをつけるしかない。
けれど、あるときふと「ここ、書きにくいな」「こう書けたら楽なのに」と思った瞬間、 それを“仕方ない”で終わらせる必要は本当にあるのだろうか、と疑問が湧きました。
今回つくったのは、ブラウザ上で動く「簡易コンパイラ」です。 テキストエリアにコードを書き、ボタンを押すと、その場で実行され、結果が表示される。 それだけの、とても小さな仕組みです。
しかし、その小さな仕組みが、「言語は自分でつくっていいものだった」という感覚を、はっきりと与えてくれました。
実際に触ってみる
この記事の中に、実際に動く簡易コンパイラを埋め込みました。 左にサンプル、中央にエディタ、右に出力があります。
そのまま Run を押してもいいですし、中央のコードを書き換えても構いません。
ここには、次のような最小限の機能があります。
- 変数の代入
- 条件分岐(if / else)
- 繰り返し(while / for)
- 数値や文字列の計算
print a形式の出力
文の終わりは改行でも「;」でもよく、print a のように、言葉に近い形で書けます。 「正しさ」よりも、「考えを書きやすいか」を優先した設計です。
基礎解説:簡易コンパイラとは何か
この簡易コンパイラは、本格的な処理系ではありません。 裏側では、JavaScriptで次のような処理を行っています。
- 入力されたテキストをトークンに分解する
- 文法として解析し、構文木をつくる
- その構文木を一つずつ評価して実行する
つまり、「言語を解釈して動かす」という最小単位の仕組みを、すべて自分で書いています。
その結果、文法は固定されたものではなくなります。 「ここは改行で終われた方がいい」「この命令はカッコを省きたい」 そう思えば、コードを書き換えるだけで、言語そのものが変わります。
言語が“与えられるもの”から、“編集できるもの”へと変わる瞬間です。
応用・背景:不満は設計に変えられる
私たちは日常的に、ツールに対して小さな違和感を抱きます。
- この記法、回りくどい
- もっと直感的に書けたらいいのに
- なぜ、ここでこう書かなければならないのか
普通、その違和感は「愚痴」で終わります。 「そういうものだから」「自分が慣れるしかない」と。
けれど、簡易コンパイラを自作してみると、視点が変わります。
違和感は、「修正可能な設計」になります。 合わないなら、変えればいい。 なければ、つくればいい。
言語でそれができると気づくと、 UIやアプリ、作業環境そのものに対しても、同じ視点が持てるようになります。
世界は固定されていない。 自分の思考に合わせて、書き換えていい。
社会的意義・未来:思考の道具を自分で持つ
この簡易コンパイラは、学習用ツールでもあり、実験場でもあります。 しかしそれ以上に、「思考の道具を自分で持てる」という感覚を与えてくれます。
考えたことを、その場で書き、すぐ動かし、結果を見る。 その循環が、ひとつの画面の中で完結する。
それは単なる便利さではありません。 「考え」と「現実」の距離が、ぐっと縮まる体験です。
将来、この簡易言語に、
repeat 10 { ... }sleep 1rect x y w h
のような命令を足していけば、 それはやがて、「自分のための言語」になっていくかもしれません。
まとめ:言語は“使うもの”から“育てるもの”へ
今回つくった簡易コンパイラは、とても小さなものです。 けれど、
- 考えたことを書ける
- すぐ動かせる
- 結果を確かめられる
という、言語の核はすでに揃っています。
ここから先は、「完成」を目指す必要はありません。 書いていて不満を感じたときに、少しずつ変えていけばいい。
言語は、与えられるものではなく、育てるもの。 この簡易コンパイラは、そのことを静かに教えてくれました。


コメント