今回は型のチェックを作ります。
型のチェックと型推論は似ているのですが、推論は大変なのでチェックをしつつ推論っぽいことが出来そうな時だけ推論っぽいことをしてみます。
型推論っぽい実装については、2週間で出来る!スクリプト言語の作り方[1]を参考にしました。
パーサコンビネータの作成は、Packrat Parserを使ってみた[2]や、tapl-scala[3] を参考にしました。
実装
環境を作って型を環境に保存し、また取り出して取り出して、2項演算子の型を求めると言った処理を追加します。
α変換を行った後に型チェックを行う事で、名前がぶつからないようになっていますが、これが良い事なのかどうかは分かりません。とにかく、うまくいっていればいいですよね。それで、テスト的なプログラムが動作するくらいまで出来たら終了としました。
まとめ
パーサコンビネータ作ったパーサのASTに型チェックを入れた事で、動作するようになりました。おそらくバグっているとは思いますが、これで終了とします。
今後の予定
この後の予定は、ほんとうに使える言語に仕上げて行ったりする事と、パターンマッチの作り方を奇麗に纏める事です。文章能力は低いので大変ですけど、悩んでない方が多分分かりやすいだろうというのがあってそのように作ろうと思っています。今回はScalaで作成しましたが、Haxeで作ってみるのもありだよなぁと思っています。Haxeで作れば、CPPに変換できるのでC言語風の言語で奇麗にネイティブなコンパイラをかけるはずなんです。問題は、パーサコンビネータのライブラリである、ParserXをCPPで出力しようとするとエラーになってしまうので、パーサは別な方法で実装する必要があります。
参考文献
[1]2週間でできる!スクリプト言語の作り方
[2]Packrat Parserを使ってみた
[3]tapl-scala