编译方法以及编译程序技术

技术编号:3761290 阅读:186 留言:0更新日期:2012-04-11 18:40
提供一种编译方法以及编译程序,可以在不受是否有类对象的生成或是否有调用的影响下,删除生成的冗长的函数,所述编译方法,将以面向对象语言描述的,且至少具有一个类的输入程序转换为目标程序,其中包括:虚拟继承解析步骤,解析所述输入程序中的所述类是否以虚拟继承被定义;特殊函数共通化步骤,在所述虚拟继承解析步骤的解析结果为,所述类没有以虚拟继承被定义的情况下,生成将所述类的多个构造函数以及多个析构函数的至少一方共通化的代码;以及生成步骤,生成包含在特殊函数共通化步骤生成的所述代码的目标程序。

【技术实现步骤摘要】

本专利技术涉及编译方法以及编译程序,尤其涉及将以面向对象语言 描述的至少具有一个类的输入程序转换为目标程序的编译方法以及编 译程序。
技术介绍
近些年,在软件开发中程序的规模逐渐趋向大规模化。为此,可 维护性以及再利用性高的面向对象语言引人瞩目。在此,面向对象语 言是指一种语言,其描述对象的动作,并将对象的动作及该对象组合 起来作为程序来描述。并且,对象是指数据以及操作该数据的过程(方 法)被一体化而成的单位。面向对象语言例如有"〔++"。 '(++"是在过程性的编程语言"(:"的 基础上添加了对面向对象编程的支持的编程语言。并且,"〔++"作为取 代在长年编程中所广泛使用的"c"而引起了人们的注意,并且,逐渐从 "(:"移向了"〔++"编程。不过,虽然'^++"与"<:"相比各种功能得到了强化,但是生成了冗 长的代码。因此,提出了各种削减这种冗长的代码的技术(例如,专利文献1或专利文献2)。在专利文献i中公开的方法是,删除有关对象没被生成的类的函数。在此,类是指,在面向对象编程中,对汇集了数据以及作为该数 据的操作过程的方法的对象雏形进行定义。通过这种定义,从而可以 将同种的对象归结在一起处理。8在专利文献2中公开了不生成不进行调用的方法的函数定义的方法。在此,函数是指,接受被称为变元的数据,执行规定的处理,并 回答结果的一连串的指令群。函数成为以众多的编程语言构成程序的 要素。专利文献l日本特开2005-18425号公报 专利文献2日本特开2006-285584号公报 然而,在上述专利文献l公开的方法中,被限定在不生成对象的 类,而在生成对象的类中的冗长函数就不能被删除。并且,在上述专 利文献2公开的方法中,被限定在不进行调用的方法,而对于进行调 用并存在冗长的函数定义的情况就不能对应了。
技术实现思路
本专利技术鉴于上述课题,目的在于提供一种编译方法以及编译程序, 其可以在不受是否有类对象(class object)的生成或是否有调用的影响 下,对生成的冗长的函数进行删除。为了解决上述的课题,本专利技术所涉及的编译方法,将以面向对象 语言描述的,且至少具有一个类的输入程序转换为目标程序,其中包 括虚拟继承解析步骤,解析所述输入程序中的所述类是否以虚拟继 承被定义;特殊函数共通化步骤,在所述虚拟继承解析步骤的解析结 果为,所述类没有以虚拟继承被定义的情况下,生成将所述类的多个构造函数以及多个析构函数的至少一方共通化的代码;以及生成步骤,生成包含在特殊函数共通化步骤生成的所述代码的目标程序。根据此方法,从而可以在不受是否有类对象的生成或是否有调用 的影响下,对没有以虚拟继承定义的类删除生成的冗长的函数(尤其 是构造函数和析构函数),从而提高代码生成效率。据此,可以在不受 是否有类对象的生成或调用的影响下,实现能够删除被生成的冗长的 函数的编译方法。最好是,在所述虚拟继承解析步骤,根据所述输入程序中所描述 的类定义,解析所述类是否以虚拟继承被定义了。根据此方法,可以针对程序中被定义的类中的没有以虚拟程序定 义的类,删除被生成的冗长的构造函数和析构函数,从而提高代码生 成效率。而且,最好是,在所述虚拟继承解析步骤,根据语言规范控制语 句,来解析所述类是否以虚拟继承被定义了,所述语言规范控制语句 是遵从语言规范在所述输入程序中被描述的控制语句。根据此方法,例如可以通过程序员将按照邦ragma指令的语言规 范控制语句描述到输入程序,从而可以不必解析原来输入程序中所描 述的类定义,针对没有以虚拟继承定义的类删除被生成的冗长的构造 函数和析构函数,从而使代码生成效率提高。而且,最好是,在所述虚拟继承解析步骤,根据语言规范控制指 令,来解析所述类是否以虚拟继承被定义了,所述语言规范控制指令 是遵从编译所述输入程序的编译系统的语言规范而被描述的控制指根据此方法,例如可以通过程序员提供按照编译系统的选项的语 言规范控制指令,从而可以不必解析原来输入程序中所描述的类定义, 针对没有以虚拟继承定义的类删除被生成的冗长的构造函数和析构函 数,从而使代码生成效率提高。而且,最好是,在所述特殊函数共通化步骤,生成将没有以虚拟 继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函 数共通化的代码,所述完全构造函数是指,在生成构成类对象的完全 类对象时被调用的构造函数,而不是在生成部分类对象时被调用的构 造函数,所述部分构造函数是指,在生成构成类对象的部分类对象时 被调用的构造函数。在所述特殊函数共通化步骤,生成将没有以虚拟 继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函 数共通化的代码,所述完全析构函数是指,在生成构成类对象的完全10类对象时被调用的析构函数,而不是在生成部分类对象时被调用的析 构函数,所述部分析构函数是指,在生成构成类对象的部分类对象时 被调用的析构函数。而且,最好是,在所述特殊函数共通化步骤,将没有以虚拟继承 被定义的所述类的多个构造函数中的完全构造函数和部分构造函数的 某一方的调用指令替换为另一方的调用指令,并通过删除作为被替换 的调用指令的构造函数的所述一方的构造函数的代码,从而生成将所 述类的完全构造函数和部分构造函数共通化的代码。在所述特殊函数 共通化歩骤,将没有以虚拟继承被定义的所述类的多个析构函数中的 完全析构函数和部分析构函数的某一方的调用指令替换为另一方的调 用指令,并通过删除作为被替换的调用指令的析构函数的所述一方的 析构函数的代码,从而生成将所述类的完全析构函数和部分析构函数 共通化的代码。而且,最好是,在所述特殊函数共通化步骤,删除没有以虚拟继 承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数 中某一方的代码,并通过将表示完全构造函数的开头地址的标记和表 示部分构造函数的开头地址的标记配置到没有被删除的另一方代码的 开头,从而生成将所述类的完全构造函数和部分构造函数共通化的代 码。在所述特殊函数共通化步骤,删除没有以虚拟继承被定义的所述 类的多个析构函数中的完全析构函数和部分析构函数中某一方的代 码,并通过将表示完全析构函数的开头地址的标记和表示部分析构函 数的开头地址的标记配置到没有被删除的另一方代码的开头,从而生 成将所述类的完全析构函数和部分析构函数共通化的代码。根据此方法,可以删除被生成的冗长的函数的完全构造函数和部 分构造函数的某一方,从而使代码生成效率提高。并且,本专利技术不仅可以作为具有这些特征性的步骤的编译方法来 实现,而且还可以作为将这些编译方法中所包含的特征性步骤作为单 元的编译装置来实现,而且,还可以作为使计算机执行该编译方法中11所包含的特征性步骤的编译器(编译程序)来实现。并且,不言而喻,这些编译程序还可以通过光盘(Compact Disc-Read OnlyMemory : CD—ROM)等记录介质或互联网等传输介质来流通。通过本专利技术,可以提供一种编译方法以及编译程序,其可以在不受是否有类对象的生成或是否有调用的影响下,删除生成的冗长的函数。据此可以达到提高代码生成效率的效果。附图说明图1是由本专利技术的实施例所涉及的编译器执行的处理内容的一个例子的流程图。图2是在虚拟继承解析步骤S10执行的处理内容的第一个例子的流程图。周3是本文档来自技高网
...

【技术保护点】
一种编译方法,将以面向对象语言描述的、且至少具有一个类的输入程序转换为目标程序,其特征在于,包括: 虚拟继承解析步骤,解析所述输入程序中的所述类是否以虚拟继承被定义; 特殊函数共通化步骤,在所述虚拟继承解析步骤的解析结果为,所述 类没有以虚拟继承被定义的情况下,生成将所述类的多个构造函数以及多个析构函数的至少一方共通化的代码;以及 生成步骤,生成包含在特殊函数共通化步骤生成的所述代码的目标程序。

【技术特征摘要】
...

【专利技术属性】
技术研发人员:浅尾忍
申请(专利权)人:松下电器产业株式会社
类型:发明
国别省市:JP[日本]

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

1