[发明专利]在编译器中构建基于图的中间表示的方法有效
申请号: | 201380078243.0 | 申请日: | 2013-07-23 |
公开(公告)号: | CN105593815B | 公开(公告)日: | 2019-08-20 |
发明(设计)人: | 亚历山大·弗拉基米罗维奇·斯莱萨连科;安东·尤利耶维奇·奥尔洛夫;张洪波 | 申请(专利权)人: | 华为技术有限公司 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F9/455 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 518129 广东*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 编译器 构建 基于 中间 表示 方法 | ||
本发明涉及一种将图数据结构构建为编译器的源代码的中间表示的方法(800),所述编译器用于将所述源代码编译为在计算机系统的处理器上运行的可执行机器代码,其中所述源代码的程序操作通过类的对象以面向对象编程语言表示,所述类对象形成层次结构,所述层次结构从所述图数据结构的基节点类派生而来,所述方法(800)包括:通过在所述图数据结构的节点中实施的工厂方法设计模板调用与所述图数据结构的现有节点关联的工厂方法产生所述图数据结构的新节点(801),其中所述图数据结构的所述节点由符号标识;以及根据代理设计模板将所述符号用作所述图数据结构的所述节点(803)的代理。
技术领域
本发明涉及一种构建图数据结构的方法以及一种将源代码编译为在计算机系统的处理器上运行的可执行机器代码的装置。
特别是,本发明涉及计算机软件工程领域。具体而言,本发明涉及一种通过使用中间代码表示来编译源代码的方法和装置。更具体地,本发明涉及表示源程序的方法,源程序即为应该被编译为机器内存中的可执行机器代码的源程序。
背景技术
编译计算机程序涉及将高级语言代码,即源代码101,转换为计算机系统的处理器中的指令109。该流程在图1中示出。源代码101由编译器111编译为可执行程序代码109。编译器111基于源代码101构建103中间表示,优化105该中间表示并生成107可以用作程序代码109的可执行文件“program.exe”。
编译器通常用中间表示以能够修改而进行分析和转换的方式表示源程序。分析和转换通常由编译器执行以优化源程序以便进行快速执行源程序。编译器本身是一种程序并且以某种语言编写。通常,开发编译器是一项复杂的任务,该任务通常被划分为许多子任务。在下文中,当编译器以面向对象语言编写时会考虑上述情况。
将源程序表示为机器内存中的数据结构有多种方式。该数据结构通常为基于某种“抽象语法树”或“图”的表示。选择其中之一是眼前具体问题中的重要问题。在本发明之前,在文档“C.Click和M.Paleczny,简单的基于图的中间表示(A simple graph-basedintermediate representation),1995年”中描述了一种程序的中间表示(intermediaterepresentation,IR)。该中间表示具有与本发明相关的以下两种属性:第一,它是基于图的,即,它是具有存储在图节点中的某些具体信息的“图数据结构”。第二,它可以通过面向对象语言予以实现。基于图的IR的节点对应于源程序的操作。各条边对应于操作之间的数据流。操作的执行顺序不由图明确指定,而是由节点之间的依赖关系决定。
机器内存中基于图的IR是一种由对象组成的数据结构。下文中它被简称为“图”。通常,为了构建图,对象‘Graph’的程序方法被调用以将新节点添加到该图中。图数据结构中的每个图节点由(S,N)对表示:‘S’是全局唯一标识符,其通常被称为符号,而该符号通常只是一个数字。所有符号由类‘Sym’的实例表示。每个符号指它所标识的节点并且可以用于访问该节点。‘N’是从‘Node’类派生出的某个类的实例。节点的具体类表示一种操作。不同的操作由不同的类来表示。操作的类可以形成一种类层次结构。该层次结构中的抽象类表示某个操作子集。该图中的各条边由存储在节点中的符号表示。
图2所示为第1行到第5行范围内的示例源程序200。函数在编译和运行时计算数组中所有数值的平均值。它如以下所述操作。第1行描绘了函数“average”,其中‘arr’是函数的引数。当调用该函数时,参数‘arr’是对类‘Array<Float>’的实例的引用,类‘Array<Float>’表示一个值数组(或者索引集合)。它是函数调用方提供的浮点数数组并且应当由该函数处理。函数主体逐步按序执行。第2行是使用实例‘arr’对类‘Array’的方法‘sum’的调用。该方法计算该数组中所有元素的总和。第3行是使用实例‘arr’对类‘Array’的方法‘length’的调用。该方法计算该数组中的元素的数量。最后,在第4行计算平均值并返回平均值作为函数的结果。第5行所示为源程序200的结尾。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于华为技术有限公司,未经华为技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201380078243.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:管理文件的方法、分布式存储系统和管理节点
- 下一篇:引起通知的显示