Lisp処理系っぽいのを書き始めてみた:2
今回は、
(+ 1 (* 2 3) 4)
のようなコードを実行できるような実装をしました。
Whileで数値を取って来て、)になったら取ってくるのを辞めるというシンプルな方法です。 これの問題点は、入れ子構造を解釈してくれないため、途中に)があるとそこで中断してしまいます。 そこで、()構造の入れ子の深さを表す変数を用意して、(を通ると+1,)を通ると-1して、その数で判定するようにしました。これで入れ子も使えるようになっています。
まだ構文木の出番ではない。
次は、defineを作って、関数を定義出来るようにしてみようかと思います。構文木と名前テーブルが必要になる?
その前に変数?面倒なので変数も関数もdefineで使えるようにしたいですね。
制作物は、https://github.com/nikuuchi/MyLisp で公開しています。