首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在创建抽象语法树的上下文中,综合的属性是什么?

在创建抽象语法树的上下文中,综合的属性是什么?
EN

Stack Overflow用户
提问于 2011-04-24 03:05:49
回答 1查看 6.8K关注 0票数 10

编译器解析源代码并构建抽象语法树。用于构造抽象语法树的函数,返回构成综合属性的指针。它们是什么?它们与继承的属性有什么不同?

编辑:我不知道这是否有帮助,但我最初在法语中听说过这些术语:归因于synthétisés,归因hérités。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-24 04:44:57

属性是与中心感兴趣的事物相关联的附加值。对于AST,您可以将它们看作与每个AST节点相关联的对(attribute_name,attribute_value),其中属性名对应于一些有趣的事实类型,属性值对应于该事实的实际状态(例如,"(constants_in_subtree_count,12)")。

继承和合成是描述如何计算每个AST节点的属性值的术语,通常与使用其子节点生成AST节点的语法规则相关联。

综合属性是从子节点的属性值中计算值并被传递到树上的属性。通常,将综合属性的值组合起来为父节点生成一个属性。如果一个AST节点有两个子节点,每个子节点都有自己的属性(constants_in_subtree_count,5)和(constants_in_subtree_count,7),那么通过传递这些属性,父节点可以计算相应的属性(constants_in_subtree_count,12)。

继承的属性是从父属性传递到子属性的属性。如果函数AST的根“知道”函数返回类型是(return_type,整数)作为属性,它可以将返回类型传递给函数根的子函数,例如函数体。在树的深处是一个实际的返回语句;如果它接收到继承的属性(return_type,X),它可以检查它正在计算的结果是否是正确的类型。

实际上,您希望能够为节点定义任意属性集,并根据处理AST所需的多种目的(构建符号表、构造控制流图、进行类型检查、计算度量、.)在树中传递它们。生成器是一种解析器生成器,它将接受语法规则、属性定义集以及关于如何计算涉及到每个规则的节点的合成和继承属性的规则,并生成一个解析器和一个计算所有属性的AST。

这种思想的价值在于它提供了一个由自动化支持的组织原则,它可以用来定期地计算关于AST的许多有趣的事情。否则,你就可以用特别的代码来编码所有的东西。

我们的DMS Software Reengineering Toolkit是一个AST操作系统(实际上是源代码到源代码的程序转换),它大量使用并行属性计算来计算AST上的各种有用的分析:常规度量、符号表、类型检查(如我前面描述的返回类型检查)、从代码中提取控制和数据流,以及在子树上计算其他不那么容易描述但很有用的结果(“在这个表达式中影响赋值的列表”)。为什么平行?嗯,子树中的属性计算本质上是独立的,所以并行性已经存在了,当你处理真正大的树时,性能很重要。DMS通常处理数千个编译单元,每个单元生成一个(可能很大) AST。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5768400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档