escape属性只被VarDec和FieldList拥有
/*在VarEscape和FormalEscape中的depth是变量在被声明时的程序深度,调用
* TraverseVar时的depth是变量在被使用时的深度,如果外部声明的变量被内
* 部使用,则需用到栈*/
Frame 实际上是在定义如何进行栈的相关操作。这一部分为abstract,即没有具体实现,达到与后端隔离的目的。例如MipsFrame作为一个Frame的implement,其中包括:Label name, AccessList formals, int offset作为每个对象含有的field。
Level的作用是管理local variables 和static function nesting的。可以认为是管理frame的分层。只有在声明函数的时候,此函数的level才会增加.每一个函数和变量都会有各自的level,标志着各自声明的层次。在某段代码中当我们遇到了一个访问某个变量a的请求,可以比较这段代码所处的函数的level和a.level来判断a的访问处和这段代码的栈层次关系,从而得到a.Access。
Level是对Frame的抽象封装,Level中包含有Frame frame, Level parent, AccessList formals。其中parent是为了维护static links, Level.formals通过值传递从frame.formals复制而来。
与此类似,Translate.Access也是Frame.Access的抽象隔离,确切的说是对MipsFrame.InFrame的抽象。
functionEntry 中的label是作为程序入口用的。
Temp包中的Temp和Label是最抽象的数据存储,在更为前端的阶段使用
这破书一遍看不懂,看第二遍才多懂一点点…看到有个人的博客里形容这本书真是贴切----点到为止…
我已经三天没有进展了..