- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
编译器解析源代码并构建抽象语法树。用于构造抽象语法树的函数返回指针,这些指针构成综合属性。它们是什么,它们与继承的属性有何区别?
编辑:我不知道这是否有帮助,但是我最初是在法语环境中听说过以下术语的:属性synthétisés,hérités。
最佳答案
属性是与中心关注的事物相关联的附加值。对于AST,您可以将它们视为与每个AST节点相关联的对(attribute_name,attribute_value),其中属性名称对应于某些有趣的事实类型,而属性值对应于该事实的实际状态(例如, ,“(constants_in_subtree_count,12)”)。
继承和合成的术语用于描述如何为每个AST节点计算属性值,通常与使用子节点生成AST节点的语法规则相关联。
合成的属性是指其值是根据子节点的属性值计算得出的属性,并将其传递到树上。通常,合成属性的值会合并以生成父节点的属性。如果AST节点有两个子节点,每个子节点都有自己的属性(constants_in_subtree_count,7)和(constants_in_subtree_count,7),则通过将这些属性向上传递,父节点可以计算其对应的属性(constants_in_subtree_count,12)。
继承的属性是从父级传递到子级的那些属性。如果函数AST的根“知道”该函数的返回类型是(return_type,integer)作为属性,则它可以将返回类型传递给该函数根的子级,例如功能主体。在那棵树的深处某个地方是一个实际的return语句;如果它接收到继承的属性(return_type,X),
它可以检查它正在计算的结果是否是正确的类型。
实际上,您希望能够为节点定义任意属性集,并在树中上下传递它们,以实现处理AST所需的多种用途(构建符号表,构建控制流程图,进行类型检查,计算指标, ...)。 attribute grammar生成器是一种解析器生成器,它将采用语法规则,属性定义集以及有关如何为每个规则中涉及的节点计算合成属性和继承属性的规则,并生成解析器和AST Walker,以计算所有内容属性。
这个想法的值(value)在于它提供了自动化支持的组织原理,可用于以常规方式计算有关AST的许多有趣的事物。否则,您将使用临时代码对所有内容进行编码。
我们的DMS Software Reengineering Toolkit是AST处理系统(实际上是源到源程序的转换),它大量使用并行属性评估来计算AST上的各种有用分析:常规指标,符号表,类型检查(例如我上面描述的返回类型检查) ),控制和数据流从代码中提取,以及其他不太容易描述但在子树上计算出的有用结果(“此表达式中的副作用分配列表”)。为什么要平行?好吧,子树中的属性计算本质上是独立的,因此并行性已经存在,并且当您处理真正的大树时,性能很重要。 DMS通常处理成千上万个编译单元,每个生成一个(可能很大)的AST。
关于parsing - 在创建抽象语法树的上下文中,综合属性是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5768400/
这一次将使用pymysql来进行一次对MySQL的增删改查的全部操作,相当于对前五次的总结: 先查阅数据库: 现在编写源码进行增删改查操作,源码为: ?
我收到警告: One or more signals are missing in the sensitivity list of always block. always@(Address)begi
我正在寻找一个完整的 java 日期管理库,它可以让我理解像这样的字符串: 明天中午 => 2011-10-20 12:00 今天下午 4 点 => 2011-10-20 16:00 等... 但如果
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 7年前关闭。 Improve this questi
下学期我可能会成为我大学网络编程类(class)教学团队的一员,我想知道要给学生布置什么样的 Javascript 作业。从编程的 Angular 来看,本类(class)不是入门类(class)。
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找书籍、工具、软件库、教程或其他非现场资源的问题对于 Stack Overflow 来说
我将我的 Gitlab 迁移到了新域。我想将所有 HTTP 请求从旧 URL 重定向到新 URL。两个域当前都指向同一服务器(使用 A DNS 记录)。 我使用 Gitlab Omnibus 包,并捆
只需在新配置的 CentOS 6.5 VM 上使用 omnibus 安装程序设置新的 Gitlab 安装。我有点 Linux 菜鸟,但我一直在尝试设置 Gitlab 安装,并且能够通过主机访问安装。
我试图更好地了解合成如何在没有指定其他条件的过程中工作。 我认为这不是编码方式,因为我没有考虑其他选项,但我的问题是如何解释这段代码? process(clock) begin if (clock'e
创建以下内容时: create view v (a, b) as select 1, 2 from dual; create or replace package p as type t is t
我是一名优秀的程序员,十分优秀!