Parse Tree,Annotated Parse Tree和Activation Tree有什么区别?(编译器)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Parse Tree,Annotated Parse Tree和Activation Tree有什么区别?(编译器)相关的知识,希望对你有一定的参考价值。

我知道什么是Parse Tree以及什么是抽象树但是在阅读了一些关于Annotated Parse Tree之后(因为我们绘制了与Parse Tree相同的详细树),我觉得它们与Parse Tree相同。

有谁能详细解释这三者之间的差异?

谢谢。

答案

注释的PARRE树是一个解析树,显示每个节点的属性值。在节点处计算属性值的过程称为注释或装饰解析树。

例如:参考下面的链接,它是3 * 5 + 4n的带注释的解析树

https://i.stack.imgur.com/WAwdZ.png

另一答案

解析树表示(程序的)源文本如何被分解以证明它与语言的语法匹配。树中的内部节点是语言语法非终结符(BNF规则左手侧令牌),而树的叶是语法规则所需顺序的语法终端(所有其他令牌)。

带注释的解析树是关于程序的各种事实已附加到解析树节点的解析树。例如,可以计算每个子树提到的标识符集,并将该集附加到子树。编制者必须在某处存储他们收集的有关该计划的信息;这是存储可从树中派生的信息的便利位置。

一个activation tree is conceptual snapshot of the result of a set of procedures calling one another at runtime。这种树中的节点代表已经运行的程序;儿童代表其父母所称的程序。

因此,(注释的)解析树和激活树之间的关键区别在于它们用于表示:编译时属性与运行时属性。

另一答案

带注释的解析树允许您将整个编译集成到解析树结构中。如果我没有弄错的话,CM Modula-3会这样做。

要构建APT,只需声明节点的抽象基类,将每个生成子类化为子类,并将子节点声明为字段变量。

以上是关于Parse Tree,Annotated Parse Tree和Activation Tree有什么区别?(编译器)的主要内容,如果未能解决你的问题,请参考以下文章

nodejs中的路由

Android 推送通知 - Parse.com API - 不工作?

python3 urllib.parse 常用函数

如何查看 Parse Server 云代码日志?

在 Parse CloudCode 中删除对象的所有子项

使用 Parse.Could.AfterSave 将关系添加到 ParseObject