(0) 阅读 (1088)

抽象语义图 编辑

词条创建者 匿名用户

抽象语义图

编辑

计算

语言

编辑

语言学vte在计算机科学中,抽象语义图(ASG)或术语图是抽象语法的一种形式,其中形式语言编程语言的表达式由一个图来表示,其顶点是表达式的子术语。ASG比抽象语法树(或AST)的抽象程度更高,后者用于表达表达式或程序的句法结构。ASG比AST更复杂、更简洁,因为它们可能包含共享的子项(也称为公共子表达式)。抽象语义图经常被编译器用作中间表示法,以存储在抽象语法树上执行共同子表达式消除的结果。语法树是树,因此不能代表共享术语。ASG通常是有向无环图(DAG),尽管在某些应用中可能允许含有周期的图。例如,含有循环的图可能被用来表示递归表达式,这些表达式在函数式编程语言中通常被用作非循环迭代结构。这些类型的图的可变性,是在图重写领域研究的。术语图与术语图重写领域有关,它涉及到通过重写规则的规范对表达式进行转换和处理,而抽象语义图在讨论语言学、编程语言、类型系统和编译时使用。抽象语法树不能够共享子表达式节点,因为适当的树中的一个节点不可能有一个以上的父节点。虽然这种概念上的简单性很吸引人,但它可能会以冗余的表示方式为代价,反过来,可能会低效地重复计算相同的术语。

抽象语义图

由于这个原因,ASG经常被用作后续编译阶段的中间语言,通过解析进行抽象句法树的构建。抽象语义图通常是通过充实和抽象的过程从抽象语法树中构建出来的。例如,充实可以是增加反向指针,即从标识符节点(正在使用的变量)到代表该变量声明的节点的边。抽象可以是删除那些只与解析有关的细节,而不是语义学。

例子。代码重构

编辑

例如,考虑代码重构的情况。为了表示一个需要输入参数的函数的实现,所接收的参数在源代码中被赋予了一个任意的、独特的名字,这样它就可以被引用了。这个概念实体的抽象表示,一个函数参数实例,可能会在函数签名中提到,也会在实现代码体中提到一次或多次。由于函数作为一个整体既是它的头或签名信息的父体,也是它的实现主体的父体,AST将不能使用同一个节点来共同识别参数实体的多种用途或出现。这个问题通过ASG的DAG性质得到了解决。对于任何给定的代码元素来说,有一个单一的、独特的节点标识的关键优势是,根据定义,每个元素的属性都是xxx存储的。这简化了重构操作,因为对于任何给定的属性实例化,都有一个确切的存在关系。如果开发者决定改变一个属性值,比如任何代码元素的名称(本例中的函数参数),ASG在本质上正好在一个地方暴露了这个值,因此,任何这样的属性变化都是隐式的、琐碎的、立即传播到全局的。


内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/163747/

发表评论

登录后才能评论

词条目录
  1. 抽象语义图
  2. 计算
  3. 语言
  4. 例子。代码重构

轻触这里

关闭目录

目录