S式でプログラミング言語つくろ!!
プログラミング言語の構文にS式を使うということ
- 構文に悩まされない
- カッコがすべてを包み込んでくれます
- パーサの実装が簡単
- JSONのパーサを作ることができるならいける
- S式言語の実装が一つもない言語なんて存在しないので、既存の実装を参考にすればいい
- shift/reduce conflictに悩まされない
- 24 shift/reduce conflictとか出ない
- 6 reduce/reduce conflictとか出て絶望しない
- 構文なんてただの飾りです
構文を作りたいのか、言語を作りたいのか
プログラマの3大欲求は「OSを作る」「エディタを作る」「言語を作る」と古から伝わっています。※諸説あり
プログラマを拗らせた人なら一度は言語を作りたいと思ったことでしょう。
そんな人が、今どき本やネットで「プログラミング言語 作り方」を調べた時に最初に出てくるものはパーサの作り方です。
そしてみんな電卓を作らされるのです。
ちゃうやん。
電卓作りたいわけじゃないんよ。
文字列をASTに分解してキャッキャしたいわけでもないんよ。
俺が考えた最強にイケてる機能を持った言語を作りたいんよ。
開発がマジで楽になる
NaviというS式でNot Lispな言語を作っているわけだけど、パーサにあたるread関数は一番最初のコミットで作った。
で、ずっとread関数への大きな修正をせずに開発は進んでるし、機能追加(構文追加)のコストはすこぶる低い。
これは本当にすごいことで、何かしらの構文解析のアルゴリズムを使いながら言語を作ってると一つの機能を追加しようと思うとたくさんのことを考えないといけない。
新しく追加しようとした機能のための構文が、既存の構文とバッティングしたときが本当に辛い。
なんかもう機能追加自体が面倒になってくる悪循環。
構文を作ることから解放されよう
カッコに包まれよう
そして言語を作ろう
マジで一度やってみ
人生変わっから
みんなもっと安易に自分が考えた最強の言語を作ろうよ
S式のread実装はC言語ですがGaucheのread.cがシンプルにまとまっていて非常にわかりやすいです。
Let's enjoy the S-Expression!!