JoyToy を Ruby で書き直す (5)

前回

いまどきのプログラム言語の作り方」読了。
サンプル言語 JoyToy の Ruby版 RoyToy も一応の完成。

第9章でオブジェクトを作成できるようになり、第10章でオブジェクトの複製と継承(加算)が可能になりました。

オブジェクトの作成

プロトタイプベースということもあって、オブジェクトの作成は JavaScript に似た感じになってます。

x = 2;

o1 = object {
  var x = 10;

  func f(n) {
    n + x;
  };

  func g(n) {
    f(n) * x;
  };
};

puts(o1.g(5));

  ↓

$ ruby roytoy.rb sample_codes/ch09-ex04.rt 
150
オブジェクトの継承(加算)

オブジェクトの加算による継承は、著者である randy氏が開発されている Soopy という言語の流れをくむもので、クラスベースのオブジェクト指向言語における、クラスの継承に相当する機能です。

o1 = object {
  var a = 1;
  func f(n) {
    n + a;
  };
};

o2 = object {
  var b = 2;
  func g(n) {
    n * b;
  };
};

o3 = o1 + o2;

puts(o3.a);
puts(o3.b);
puts(o3.f(3));
puts(o3.g(4));

  ↓

$ ruby roytoy.rb sample_codes/ch10-p275.rt 
1
2
4
8

ほへ〜


以上で、「いまどきのプログラム言語の作り方」(2周目)は終了です。

サンプルをコンパイルして実行するだけじゃなくて、(別の言語を使って)自分で書き直してみることで、スキャナと再帰降下なパーサについては、だいぶ理解が深まったと思います。(文法修正 → スキャナ&パーサ修正、というサイクルを何度繰り返したことか(笑))


さて、次なる攻略目標は、

です。(結構多い)