C程序编译方法及编译器技术

技术编号:11663903 阅读:85 留言:0更新日期:2015-07-01 02:04
本发明专利技术实施例提供一种C程序编译方法及编译器,该方法包括:依次对C程序进行词法分析、语法分析、语义分析及中间代码生成,将经过所述语义分析及中间代码生成的C程序以函数为单位分配在至少两个线程上,以分别进行中间代码优化;对经过所述中间代码优化的C程序进行目标代码生成。能够降低后端阶段的耗时,从而提高C程序编译效率。

【技术实现步骤摘要】

本专利技术涉及通信
,尤其涉及一种C程序编译方法及编译器
技术介绍
C语言被广泛应用于开发各种系统软件,如操作系统、编译器、嵌入式系统、并行计算等,因此,针对各种目标机器的C程序编译器也层出不穷。C程序编译器的功能就是将用户的C程序转换成语义等价的目标机程序。在经典编译架构中,编译过程通常被划分为5个串行的模块,即:词法分析、语法分析、语义分析及中间代码生成、中间代码优化、目标代码生成。通常将词法分析、语法分析、语义分析及中间代码生成阶段合称为前端,将中间代码优化、目标代码生成阶段合称为后端。前端主要完成与源语言相关的各类分析工作,而后端主要涉及与目标机相关的各类转换、生成工作。随着用户C程序规模及复杂程度不断增大,编译过程将耗费更多的时间。现有技术中,中间代码优化和目标代码生成均是以C程序的文件为单位执行的,需要逐一的处理文件中的各个函数,速度很慢,导致编译过程中后端的阶段非常耗时。因此,降低后端阶段的耗时,减少C程序编译时间,从而提高C程序编译效率成为亟待解决的问题。
技术实现思路
本专利技术提供一种C程序编译方法及编译器,能够降低后端阶段的耗时,从而提高C程序编译效率。一方面,本专利技术提供一种C程序编译方法,包括:依次对C程序进行词法分析、语法分析、语义分析及中间代码生成,将经过所述语义分析及中间代码生成的C程序以函数为单位分配在至少两个线程上,以分别进行中间代码优化;对经过所述中间代码优化的C程序进行目标代码生成。另一方面,本专利技术提供一种C程序编译器,包括:用于对C程序进行词法分析的词法分析器、用于对词法分析后的C程序进行语法分析的语法分析器、用于对语法分析后的C程序进行语义分析及中间代码生成的语义分析及中间代码生成器、中间代码优化器和目标代码生成器,所述中间代码优化器,用于将经过所述语义分析及中间代码生成的C程序以函数为单位分配在至少两个线程上,以分别进行中间代码优化;所述目标代码生成器,用于对经过所述中间代码优化的C程序进行目标代码生成。本专利技术提供的C程序编译方法及编译器,依次对C程序进行词法分析、语法分析、语义分析及中间代码生成,将经过语义分析及中间代码生成的C程序以函数为单位分配在至少两个线程上,以分别进行中间代码优化;对经过中间代码优化的C程序进行目标代码生成。这样一来,编译器在进行中间代码优化时,可以以函数为单位,在提供的至少两个线程上并行的处理各函数,加快了优化的速度,进而减少了 C程序编译时间,提高了 C程序编译效率。【附图说明】为了更清楚地说明本专利技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本专利技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1为本专利技术提供的C程序编译方法的流程示意图;图2为本专利技术提供的另一 C程序编译方法的流程示意图;图3为本专利技术提供的符号系统的结构示意图;图4为本专利技术提供的编译并行方法的流程示意图;图5为本专利技术C程序编译器的结构示意图;图6为本专利技术另一 C程序编译器的结构示意图;图7为本专利技术再一 C程序编译器的结构示意图。【具体实施方式】为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本专利技术保护的范围。图1为本专利技术提供的C程序编译方法的流程示意图,如图1所示,该方法包括:SlOUC程序编译器依次对C程序进行词法分析、语法分析、语义分析及中间代码生成。需要说明的是,词法分析、语法分析、语义分析及中间代码生成,主要完成与源语言相关的各类分析工作,如对组成C程序文件的各个函数进行分析以得到各个函数的信息如函数长度等等。S102、C程序编译器将经过语义分析及中间代码生成的C程序以函数为单位分配在至少两个线程上,以分别进行中间代码优化。进一步地,编译器可以将中间代码以函数为单位独立组织,即为每个函数分配一个优化线程,并将所有线程加入线程池,由操作系统统一调度,如,中央处理器(CenterProcess Unit, CPU)可支持的线程为4个,该的包括的函数为6个,其函数长度经过前端分析确定为:一个较长的函数,三个很短的函数和两个中等长度的函数,这时,可以将较长的函数分配到一个线程上,其他两个中等长度的函数各分配一个线程,最后将三个很短的函数分配到同一个线程上;或者,将较长的函数分配到一个线程上,其他两个中等长度的函数各分配一个线程,并在其各自的线程上也分别分配一个很短的函数,将最后一个很短的线程分配到另一个空置的线程上等等,此处仅仅举例说明可以根据函数的长度分配到不同的线程上,但不以上述分配方式做任何限定。且保护范围不限于上述举例,以前端分析得出的其他函数信息的分配方法均在保护范围之内。进一步地,在线程上的函数可以以各函数为单位分别优化,优化可以使得C程序编译出的执行程序执行加快或者C程序编译出的文件较小,分别优化可以加快优化的速度。S103、C程序编译器对经过中间代码优化的C程序进行目标代码生成。进一步地,编译器可以对上述优化后的C程序进行目标代码生成,C程序可以是分别利用上述线程以函数为单位并行进行代码生成,还可以是以其他方式分配在不同线程上以函数为单位并行进行代码生成。本专利技术提供的C程序编译方法,依次对C程序进行词法分析、语法分析、语义分析及中间代码生成,将经过语义分析及中间代码生成的C程序以函数为单位分配在至少两个线程上,以分别进行中间代码优化;对经过中间代码优化的C程序进行目标代码生成。这样一来,编译器在进行中间代码优化时,可以以函数为单位,在提供的至少两个线程上并行的处理各函数,加快了优化的速度,进而减少了 C程序编译时间,提高了 C程序编译效率。下面采用具体的实施例,对图1所示方法实施例的技术方案进行详细说明。图2为本专利技术提供的另一 C程序编译方法的流程示意图,如图2所示,该方法包括:S201、C程序编译器依次对C程序进行词法分析、语法分析、语义分析及中间代码生成获取C程序中各函数的信息。S202、C程序编译器根据获取的C程序中各函数的信息将各函数分配在CPU可支持的至少两个线程上。举例来说,各函数的信息可以是函数长度,或者该函数执行优化的历史参照时间长短等。S203、C程序编译器为各函数对应分配一个符号访问接口,符号访问接口与全局符号数据相连,且与函数对应的局部符号数据相连。举例来说,图3为本专利技术提供的符号系统的结构示意图,符号系统是编译器的数据中心,主要定义了编译过程中各种数据结构及其访问接口,如符号信息、类型系统、抽象语法树等。如图3所示,本专利技术考虑到后端多线程对符号系统的并发访问,因此对于符号系统设计也是以函数为并发控制粒度设计的:为C程序中的每个函数提供一个符号访问接口,该符号访问接口与全局符号数据相连,使得函数可以改写全局符号,且该符号访问接口与该函数对应的局部符号数据相连,使得该函数可以改写自己的局部符号。S204、C程序编译器在分配到的线程上本文档来自技高网...

【技术保护点】
一种C程序编译方法,包括:依次对C程序进行词法分析、语法分析、语义分析及中间代码生成,其特征在于,将经过所述语义分析及中间代码生成的C程序以函数为单位分配在至少两个线程上,以分别进行中间代码优化;对经过所述中间代码优化的C程序进行目标代码生成。

【技术特征摘要】

【专利技术属性】
技术研发人员:裘巍卢昊潘松
申请(专利权)人:上海海尔集成电路有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1