2012-10-23 10 views
6

私は開発中であり、スモールトークのための抽象構文木メタモデルを作成しています。今はブロックのモデリングに問題があります。彼らはリテラルのようなものですが、一方でメソッドのような動作エンティティです。ブロックはラムダ関数のようなものなので、誰かがそれらを使って作業する方が良いかもしれません。ラムダ関数のast表現

アドバイスをいただきありがとうございます。

答えて

8

リファクタリングブラウザには非常に優れたASTがあり、その実装を見てください。

質問について:リファクタリングブラウザは、ブロックとメソッドの共有部分をSequenceNodeという別のノードタイプに抽出します。シーケンスノードは、tempsと一連のステートメントをモデル化します。ブロックノードは、シーケンスノードをラップし、引数を追加し、値ノードの共有動作を継承します。メソッドノードは、シーケンスノードをラップし、メソッド名、引数、プラグマなどを追加します。