2012-10-23 10 views
6

Ich entwickle und Abstract Syntax Tree Meta-Modell für einen Smalltalk und jetzt habe ich Probleme mit der Modellierung eines Blocks. Sie sind eine Art von Literalen, aber auf der anderen Seite sind sie Verhaltensentitäten wie Methoden. Blöcke sind eine Art Lambda-Funktionen, also könnte jemand besser mit ihnen arbeiten.Ast Darstellung der Lambda-Funktion

Ich werde für jeden Rat dankbar sein.

Antwort

8

Der Refactoring Browser hat einen sehr schönen AST, schauen Sie sich die Implementierung an.

Zu Ihrer Frage: Der Refactoring Browser extrahiert die gemeinsamen Teile von Blöcken und Methoden in einen separaten Knotentyp SequenceNode genannt. Der Sequenzknoten modelliert die Temps und die Abfolge der Anweisungen. Der Blockknoten umschließt dann den Sequenzknoten, fügt die Argumente hinzu und erbt das gemeinsame Verhalten der Wertknoten. Der Methodenknoten umschließt den Sequenzknoten und fügt Methodenname, Argumente, Pragmas usw. hinzu.