こちらで書いた通り、_superキーワードを使うことで、スーパークラスのコンストラクタを呼び出してやろうという試みをしています。_superキーワードを利用しているメソッドの中身を、toString()によって一度文字列化して、_superをスーパークラスのコンストラクタを格納したメンバ変数名へと置き換えることで、あたかも_superでスーパークラスのコンストラクタを呼び出しているように見せかけています。
一応簡単に、正規表現を使って_superを、コンストラクタを格納しているメンバ変数名へと置換していたのですが(正確にはthis._superを置換)、まぁそりゃ無謀なので。きちんとやることにしました。きちんとやるって何をやるかといいますと、コメントや関数呼び出し等々を判別して、ここは_superキーワードを利用していると解釈した上での置換をやります。それをするためには何をしなければならないか、といいますと、字句解析です。
在ればちょっと嬉しいな、という機能のために字句解析するんかい、とか思いましたが、とりあえず実装してみます。こういう場合、オートマトンで図式化してコーディングしたほうがいいんかな?とか思いましたが、オートマトンがわやくちゃになってきたので、やっぱりゴリゴリif elseでコーディングします。
何も考えずに字句解析を用いて_superキーワード置換を行っていたら、何だか処理が重くなりました。なんと、全ての実行されるコンストラクタを字句解析していました。100回近くになるのかな?各コンストラクタのステップ数はまちまちですが。もちろん、後で不要な字句解析をカットするようにしました。
しっかし、字句解析してやると実行時にコードの改変が行いやすいので、独自キーワードの定義とか色々出来そうな気がしてきました。それをやったから何だという話ですが。ノリ的にはClass with Cみたいな言語系に出来るのかなーとか思ったりします。
No comments:
Post a Comment