6

smalltalk 用の抽象構文ツリー メタモデルを開発していますが、現在、ブロックのモデリングに問題があります。それらは一種のリテラルですが、メソッドのような動作エンティティです。ブロックは一種のラムダ関数なので、誰かがブロックを使って作業するより良い練習をしたかもしれません.

どんなアドバイスにも感謝します。

4

1 に答える 1

8

Refactoring Browser には非常に優れた AST があります。その実装を見てください。

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

于 2012-10-23T15:39:02.840 に答える