我正在开发一个针对smalltalk的抽象语法树元模型,现在我在建模块时遇到了麻烦。它们有点文字,但另一方面它们是方法的行为实体。块是一种lambda函数,所以也许有人可以更好地使用它们。
我会感谢任何建议。
答案 0 :(得分:8)
重构浏览器有一个非常好的AST,看看它的实现。
关于您的问题:重构浏览器将块和方法的共享部分提取到名为SequenceNode
的单独节点类型中。序列节点对temps和语句序列进行建模。然后,块节点包装序列节点,添加参数,并继承值节点的共享行为。方法节点包装序列节点并添加方法名称,参数,编译指示等。