CN101488095A - 编译方法以及编译程序 - Google Patents
编译方法以及编译程序 Download PDFInfo
- Publication number
- CN101488095A CN101488095A CNA2009100034882A CN200910003488A CN101488095A CN 101488095 A CN101488095 A CN 101488095A CN A2009100034882 A CNA2009100034882 A CN A2009100034882A CN 200910003488 A CN200910003488 A CN 200910003488A CN 101488095 A CN101488095 A CN 101488095A
- Authority
- CN
- China
- Prior art keywords
- class
- function
- commonization
- destructor
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/4492—Inheritance
Abstract
提供一种编译方法以及编译程序,可以在不受是否有类对象的生成或是否有调用的影响下,删除生成的冗长的函数,所述编译方法,将以面向对象语言描述的,且至少具有一个类的输入程序转换为目标程序,其中包括:虚拟继承解析步骤,解析所述输入程序中的所述类是否以虚拟继承被定义;特殊函数共通化步骤,在所述虚拟继承解析步骤的解析结果为,所述类没有以虚拟继承被定义的情况下,生成将所述类的多个构造函数以及多个析构函数的至少一方共通化的代码;以及生成步骤,生成包含在特殊函数共通化步骤生成的所述代码的目标程序。
Description
技术领域
本发明涉及编译方法以及编译程序,尤其涉及将以面向对象语言描述的至少具有一个类的输入程序转换为目标程序的编译方法以及编译程序。
背景技术
近些年,在软件开发中程序的规模逐渐趋向大规模化。为此,可维护性以及再利用性高的面向对象语言引人瞩目。在此,面向对象语言是指一种语言,其描述对象的动作,并将对象的动作及该对象组合起来作为程序来描述。并且,对象是指数据以及操作该数据的过程(方法)被一体化而成的单位。
面向对象语言例如有“C++”。“C++”是在过程性的编程语言“C”的基础上添加了对面向对象编程的支持的编程语言。并且,“C++”作为取代在长年编程中所广泛使用的“C”而引起了人们的注意,并且,逐渐从“C”移向了“C++”编程。
不过,虽然“C++”与“C”相比各种功能得到了强化,但是生成了冗长的代码。因此,提出了各种削减这种冗长的代码的技术(例如,专利文献1或专利文献2)。
在专利文献1中公开的方法是,删除有关对象没被生成的类的函数。
在此,类是指,在面向对象编程中,对汇集了数据以及作为该数据的操作过程的方法的对象雏形进行定义。通过这种定义,从而可以将同种的对象归结在一起处理。
在专利文献2中公开了不生成不进行调用的方法的函数定义的方法。
在此,函数是指,接受被称为变元的数据,执行规定的处理,并回答结果的一连串的指令群。函数成为以众多的编程语言构成程序的要素。
专利文献1日本特开2005-18425号公报
专利文献2日本特开2006-285584号公报
然而,在上述专利文献1公开的方法中,被限定在不生成对象的类,而在生成对象的类中的冗长函数就不能被删除。并且,在上述专利文献2公开的方法中,被限定在不进行调用的方法,而对于进行调用并存在冗长的函数定义的情况就不能对应了。
发明内容
本发明鉴于上述课题,目的在于提供一种编译方法以及编译程序,其可以在不受是否有类对象(class object)的生成或是否有调用的影响下,对生成的冗长的函数进行删除。
为了解决上述的课题,本发明所涉及的编译方法,将以面向对象语言描述的,且至少具有一个类的输入程序转换为目标程序,其中包括:虚拟继承解析步骤,解析所述输入程序中的所述类是否以虚拟继承被定义;特殊函数共通化步骤,在所述虚拟继承解析步骤的解析结果为,所述类没有以虚拟继承被定义的情况下,生成将所述类的多个构造函数以及多个析构函数的至少一方共通化的代码;以及生成步骤,生成包含在特殊函数共通化步骤生成的所述代码的目标程序。
根据此方法,从而可以在不受是否有类对象的生成或是否有调用的影响下,对没有以虚拟继承定义的类删除生成的冗长的函数(尤其是构造函数和析构函数),从而提高代码生成效率。据此,可以在不受是否有类对象的生成或调用的影响下,实现能够删除被生成的冗长的函数的编译方法。
最好是,在所述虚拟继承解析步骤,根据所述输入程序中所描述的类定义,解析所述类是否以虚拟继承被定义了。
根据此方法,可以针对程序中被定义的类中的没有以虚拟程序定义的类,删除被生成的冗长的构造函数和析构函数,从而提高代码生成效率。
而且,最好是,在所述虚拟继承解析步骤,根据语言规范控制语句,来解析所述类是否以虚拟继承被定义了,所述语言规范控制语句是遵从语言规范在所述输入程序中被描述的控制语句。
根据此方法,例如可以通过程序员将按照#pragma指令的语言规范控制语句描述到输入程序,从而可以不必解析原来输入程序中所描述的类定义,针对没有以虚拟继承定义的类删除被生成的冗长的构造函数和析构函数,从而使代码生成效率提高。
而且,最好是,在所述虚拟继承解析步骤,根据语言规范控制指令,来解析所述类是否以虚拟继承被定义了,所述语言规范控制指令是遵从编译所述输入程序的编译系统的语言规范而被描述的控制指令。
根据此方法,例如可以通过程序员提供按照编译系统的选项的语言规范控制指令,从而可以不必解析原来输入程序中所描述的类定义,针对没有以虚拟继承定义的类删除被生成的冗长的构造函数和析构函数,从而使代码生成效率提高。
而且,最好是,在所述特殊函数共通化步骤,生成将没有以虚拟继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数共通化的代码,所述完全构造函数是指,在生成构成类对象的完全类对象时被调用的构造函数,而不是在生成部分类对象时被调用的构造函数,所述部分构造函数是指,在生成构成类对象的部分类对象时被调用的构造函数。在所述特殊函数共通化步骤,生成将没有以虚拟继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函数共通化的代码,所述完全析构函数是指,在生成构成类对象的完全类对象时被调用的析构函数,而不是在生成部分类对象时被调用的析构函数,所述部分析构函数是指,在生成构成类对象的部分类对象时被调用的析构函数。
而且,最好是,在所述特殊函数共通化步骤,将没有以虚拟继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数的某一方的调用指令替换为另一方的调用指令,并通过删除作为被替换的调用指令的构造函数的所述一方的构造函数的代码,从而生成将所述类的完全构造函数和部分构造函数共通化的代码。在所述特殊函数共通化步骤,将没有以虚拟继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函数的某一方的调用指令替换为另一方的调用指令,并通过删除作为被替换的调用指令的析构函数的所述一方的析构函数的代码,从而生成将所述类的完全析构函数和部分析构函数共通化的代码。
而且,最好是,在所述特殊函数共通化步骤,删除没有以虚拟继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数中某一方的代码,并通过将表示完全构造函数的开头地址的标记和表示部分构造函数的开头地址的标记配置到没有被删除的另一方代码的开头,从而生成将所述类的完全构造函数和部分构造函数共通化的代码。在所述特殊函数共通化步骤,删除没有以虚拟继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函数中某一方的代码,并通过将表示完全析构函数的开头地址的标记和表示部分析构函数的开头地址的标记配置到没有被删除的另一方代码的开头,从而生成将所述类的完全析构函数和部分析构函数共通化的代码。
根据此方法,可以删除被生成的冗长的函数的完全构造函数和部分构造函数的某一方,从而使代码生成效率提高。
并且,本发明不仅可以作为具有这些特征性的步骤的编译方法来实现,而且还可以作为将这些编译方法中所包含的特征性步骤作为单元的编译装置来实现,而且,还可以作为使计算机执行该编译方法中所包含的特征性步骤的编译器(编译程序)来实现。并且,不言而喻,这些编译程序还可以通过光盘(Compact Disc-Read OnlyMemory:CD—ROM)等记录介质或互联网等传输介质来流通。
通过本发明,可以提供一种编译方法以及编译程序,其可以在不受是否有类对象的生成或是否有调用的影响下,删除生成的冗长的函数。据此可以达到提高代码生成效率的效果。
附图说明
图1是由本发明的实施例所涉及的编译器执行的处理内容的一个例子的流程图。
图2是在虚拟继承解析步骤S10执行的处理内容的第一个例子的流程图。
图3是在虚拟继承解析步骤S10执行的处理内容的第二个例子的流程图。
图4是在虚拟继承解析步骤S10执行的处理内容的第三个例子的流程图。
图5是在特殊函数共通化步骤S11执行的处理内容的第一个例子的流程图。
图6是在特殊函数共通化步骤S11执行的处理内容的第二个例子的流程图。
图7是示出在程序存储部1存储的源程序的一个例子的图。
图8是示出以以往的方法进行编译的情况下的汇编程序输出结果的图。
图9是示出以以往的方法进行编译的情况下的汇编程序输出结果的图。
图10是示出以以往的方法进行编译的情况下的汇编程序输出结果的图。
图11是示出是否为共通化对象的共通化对象判定标志的内容的示例图。
图12是示出以本发明的方法进行编译的情况下的汇编程序输出结果的图。
图13是示出以本发明的方法进行编译的情况下的汇编程序输出结果的图。
图14是示出以本发明的方法进行编译的情况下的汇编程序输出结果的图。
图15是示出以本发明的方法进行编译的情况下的汇编程序输出结果的图。
图16是示出以本发明的方法进行编译的情况下的汇编程序输出结果的图。
图17是示出以本发明的方法进行编译的情况下的汇编程序输出结果的图。
符号说明
1 程序存储部
2 生成代码存储部
具体实施方式
以下参照附图对本发明的实施例所涉及的编译方法进行说明。
另外,以下的实施例仅为本发明的一个具体的例子,但本发明的技术范围并非受此所限。
图1是编译器执行的处理内容的一个例子的流程图。在此,编译器是指,将人以编译语言描述的软件的设计图(源程序)转换为计算机能够执行的形式(对象代码)的软件(编译程序)。
首先,编译器执行输入步骤(S1),例如读取程序存储部1中所存储的程序头文件以及源程序。
之后,编译器执行语法分析步骤(S2),即:分析在输入步骤S1读取的源程序的语法,并生成符号表和语法树。
在此,符号表是一个列表,由在分析时检测出的所有标识符和这些标识符在程序中的位置以及属性构成,并且,符号表也是编译器判断标识符的使用方法时所利用的列表。并且,语法树是表示编程语言的语法的树结构。
之后,编译器根据生成的语法树,执行生成中间代码的中间代码生成步骤(S3)。
之后,编译器执行最佳化步骤(S4),即:对在中间代码生成步骤S3生成的中间代码进行各种最佳化。
之后,编译器执行资源分配步骤(S5),即:对在最佳化步骤S4被最佳化了的中间代码中所包含的所有变数,分配寄存器或存储器等硬件资源。
之后,执行输出步骤(S6),即:将在资源分配步骤S5被进行了资源分配的中间代码转换为对象代码,并作为对象程序输出到生成代码存储部2。在输出步骤S6输出的对象程序被存储到生成代码存储部2。
最佳化步骤S4如图1所示,包括:虚拟继承解析步骤S10、特殊函数共通化步骤S11、以及其他的最佳化步骤S12。
虚拟继承解析步骤S10解析中间代码,并解析在程序中存在的类是否以虚拟继承被定义。
在此,虚拟继承是用于,在进行从多个父类中继承类的性质的多重继承的同时,避开基类的重复继承的类继承方法。例如,有两个继承了某个类的类,在多重继承这两个类的情况下,继承两次最原始的类(基类)。在虚拟继承中,将继承了两次的作为最原始的基类,作为虚拟基本类来声明,并通过不区别虚拟基本类的实例,从而可以防止继承的重复。
在特殊函数共通化步骤S11,按照虚拟继承解析步骤S10的解析结果,将生成的冗长的多个构造函数或多个析构函数共通化。
在此,构造函数是指,在以面向对象的编程语言生成新的对象之时被调用并进行内容的初始化等的函数,也称为构造符。并且,析构函数是指,在以面向对象的编程语言删除对象时被调用并进行后处理等的函数,也称为析构符。
有关虚拟继承解析步骤S10以及特殊函数共通化步骤S11的详细内容待以后叙述。
并且,其他的最佳化步骤S12是一般的最佳化步骤,不是本发明的着重点,因此省略说明。
并且,对于输入步骤S1、语法分析步骤S2、中间代码生成步骤S3、资源分配步骤S5、对象输出步骤S6、以及其他最佳化步骤S12,由于与以往的处理相同,不是本发明的着重点。因此省略详细说明。
并且,在本发明的虚拟继承解析步骤S10以及特殊函数共通化步骤S11,并非仅限定于中间代码生成步骤S3和资源分配步骤S5之间的最佳化步骤S4内,若编译步骤内的区间为能够解析并进行共通化的状态,则可以分别在某个区间(S1至S6的区间内)内被执行。
以下,对本发明的着眼点即虚拟继承解析步骤S10以及特殊函数共通化步骤S11进行说明。
图2是在虚拟继承解析步骤S10被执行的处理内容的第一个例子的流程图。
在虚拟继承解析步骤S10,对每个与在输入步骤S1被输入的源程序(输入程序)相对应的类定义重复进行以下的处理(图2中的循环A),即对在中间代码生成步骤S3生成的中间代码内所描述的每个类定义重复进行以下的处理(图2中的循环A)。
首先,对输入程序确认是否存在作为解析对象的类定义。
在解析对象(类定义)存在的情况下,中间代码内所描述的类(包含被继承的类)通过虚拟继承,来解析是否进行了类定义(S1021)。
在通过虚拟继承类定义没有被进行的情况下(S1021的“否”的情况),将解析了的该类的所有构造函数或析构函数作为共通化的对象(S1022)。例如可以以表示作为共通化对象的共通化判定标志等来控制。
在通过虚拟继承进行了类定义的情况下(S1021的“是”的情况),不将解析了的该类的所有构造函数或析构函数作为共通化的对象(S1023)。例如可以以表示不作为共通化对象的共通化判定标志等来控制。
之后,对输入程序确认是否存在是解析对象而未被解析的其他的类定义。在是解析对象而未被解析的其他的类定义存在的情况下,直到作为解析对象的类定义不存在为止,重复进行循环A。在是解析对象而未被解析的其他的类定义不存在的情况下,循环A结束,从而处理也结束。
如以上所述,在虚拟继承解析步骤S10,解析中间代码,并解析程序中所存在的类是否通过虚拟继承被定义。
并且,关于表示是否为共通化对象的信息的形态,只要在特殊函数共通化步骤S11能够被参考,即可以是中间代码内的数据,也可以是与类相关联的独立的数据。
图3是在虚拟继承解析步骤S10执行的处理内容的第二个例子的流程图。
在虚拟继承解析步骤S10与图2同样,对每个与输入程序相对应的类定义重复进行以下的处理(图3中的循环B)。
首先,对输入程序确认是否存在作为解析对象的类定义。
在解析对象(类定义)存在的情况下,解析在输入程序中的描述中的语言规范,是否通过语言规范控制语句被控制为不包含虚拟继承的语言规范(S1031)。在此,语言规范控制语句是指,根据语言规范在输入程序中描述的控制语句。例如,通过将用于指示使像#pragma这样的语言规范中的特殊功能有效的控制语句在源程序中描述,从而控制向编译器直接提供有关语言规范的信息。
在通过语言规范控制语句,被控制为不包含虚拟继承的语言规范的情况下(S1031的“否”的情况),将该类中的所有构造函数或析构函数作为共通化对象(S1032)。
在不是这种情况时,即在通过语言规范控制语句,未被控制为不包含虚拟继承的语言规范的情况下(S1031的“是”的情况),则不将该类中的所有构造函数或析构函数作为共通化对象(S1033)。
之后,对输入程序确认是否存在是解析对象而未被解析的其他的类定义。在是解析对象而未被解析的其他的类定义存在的情况下,直到作为解析对象的类定义不存在为止,重复进行循环B。在是解析对象而未被解析的其他的类定义不存在的情况下,循环B结束,从而处理也结束。
如以上所述,在虚拟继承解析步骤S10,解析中间代码,并解析程序中所存在的类是否通过虚拟继承被定义。
图4是在虚拟继承解析步骤S10执行的处理内容的第三个例子的流程图。
在虚拟继承解析步骤S10与图4同样,对每个与输入程序相对应的类定义重复进行以下的处理(图4中的循环C)。
首先,对输入程序确认是否存在作为解析对象的类定义。
在解析对象(类定义)存在的情况下,解析在输入程序中描述的语言规范,是否通过语言规范控制指令,被控制为不包含虚拟继承的语言规范(S1041)。在此,语言规范控制指令是指,根据编译输入程序的编译系统的语言规范,而被描述的控制指令。例如,通过将用于指示使像指令行选项这样的编译器中的特殊功能有效的指令在源程序中描述,从而控制向编译系统直接提供有关语言规范的信息。
在通过语言规范控制指令,被控制为不包含虚拟继承的语言规范的情况下(S1041的“是”的情况),将该类的所有构造函数或析构函数作为共通化对象(S1042)。
在不是这种情况时,即在通过语言规范控制指令,未被控制为不包含虚拟继承的语言规范的情况下(S1041的“否”的情况),则不将该类中的所有构造函数或析构函数作为共通化对象(S1043)。
之后,对输入程序确认是否存在是解析对象而未被解析的其他的类定义。在是解析对象而未被解析的其他的类定义存在的情况下,直到作为解析对象的类定义不存在为止,重复进行循环C。在是解析对象而未被解析的其他的类定义不存在的情况下,循环C结束,从而处理也结束。
如以上所述,在虚拟继承解析步骤S10,解析中间代码,并解析程序中所存在的类是否通过虚拟继承被定义。
并且,关于图2到图4说明的虚拟继承解析步骤S10的第一至第三的处理内容,例如可以通过附加优先度,而作为包含图2到图4的所有步骤的一个虚拟继承解析步骤10,也可以自由选择组合。
以下,对特殊函数共通化步骤S11进行说明。
图5是在特殊函数共通化步骤S11执行的处理内容的第一个例子的流程图。
在特殊函数共通化步骤S11,按照在虚拟继承解析步骤S10的解析结果,进行对在中间代码生成步骤S3生成的中间代码内所描述的各个类的构造函数的处理(循环D),以及对析构函数的处理(循环E)。
首先,对在虚拟继承解析步骤S10解析的中间代码内所描述的各个类,进行是否存在构造函数的确认。
在构造函数存在的情况下,判断该构造函数是否为共通化对象(S1151)。
在该构造函数是共通化对象的情况下(S1151的“是”的情况),将针对该构造函数的完全构造函数和部分构造函数的任一方的调用指令替换为另外一方(S1152)。并且,删除被替换的一方(完全或部分)的构造函数的代码(S1153)。
在此,完全构造函数是指,在生成构成类对象的完全类对象时被调用的构造函数,而不是在生成构成类对象的部分类对象时被调用的构造函数。并且,部分结构函数是指,在生成构成类对象的部分类对象时被调用的构造函数。
之后,对在虚拟继承解析步骤S10解析的中间代码内所描述的各个类,进一步进行是否存在构造函数的确认。进而,在构造函数存在的情况下,对各个类的构造函数重复进行循环D所示的处理内容。在构造函数不存在的情况下,循环D结束,从而循环D所示的处理也结束。
并且,在S1151若该构造函数不是共通化对象则不进行任何处理(S1151的“否”的情况)。并且,结束循环D的处理。
接着,对循环E所示的析构函数进行处理。首先,对在虚拟继承解析步骤S10解析的中间代码内所描述的各个类,进行是否存在析构函数的确认。
在析构函数存在的情况下,判断该析构函数是否为共通化对象(S1154)。
在该析构函数是共通化对象的情况下(S1154的“是”的情况),将针对该析构函数的完全析构函数和部分析构函数的任一方的调用指令替换为另外一方(S1155)。并且,删除被替换的一方(完全或部分)的析构函数的代码(S1156)。
在此,完全析构函数是指,在生成构成类对象的完全类对象时被调用的析构函数,而不是在生成构成类对象的部分类对象时被调用的析构函数。并且,部分析构函数是指,在生成构成类对象的部分类对象时被调用的析构函数。
之后,对在虚拟继承解析步骤S10解析的中间代码内所描述的各个类,进一步进行是否存在析构函数的确认。进而,在析构函数存在的情况下,对各个类的析构函数重复进行循环E所示的处理内容。在析构函数不存在的情况下,循环E结束,从而循环E所示的处理也结束。
并且,在S1154若该析构函数不是共通化对象则不进行任何处理(S1154的“否”的情况)。并且,结束循环E的处理。
如以上所述,在特殊函数共通化步骤S11,按照虚拟继承解析步骤S10的解析结果,使被生成的冗长的多个构造函数或多个析构函数共通化。据此,可以删除被生成的冗长的函数的完全构造函数和部分构造函数的某一方,从而提高代码生成效率。
图6是在特殊函数共通化步骤S11执行的处理内容的第二个例子的流程图。
与图5同样,在特殊函数共通化步骤S11,按照在虚拟继承解析步骤S10的解析结果,进行对在中间代码生成步骤S3生成的中间代码内所描述的各个类的构造函数的处理(循环E),以及对析构函数的处理(循环G)。
首先,对在虚拟继承解析步骤S10解析的中间代码内所描述的各个类,进行是否存在构造函数的确认。
在构造函数存在的情况下,判断该构造函数是否为共通化对象(S1161)。
在该构造函数是共通化对象的情况下(S1161的“是”的情况),将针对该构造函数的完全构造函数和部分构造函数的任一方的代码删除(S1162)。并且,将表示完全构造函数的开头地址的标记和表示部分构造函数的开头地址的标记配置到另一方代码的开头(S1163)。
之后,对在虚拟继承解析步骤S10解析的中间代码内所描述的各个类,进一步进行是否存在构造函数的确认。进而,在构造函数存在的情况下,对各个类的构造函数重复进行循环F所示的处理内容。在构造函数不存在的情况下,循环F结束,从而循环F所示的处理也结束。
并且,在S1161若该构造函数不是共通化对象则不进行任何处理(S1161的“否”的情况)。并且,结束循环D的处理。
接着,对循环G所示的析构函数进行处理。首先,对在虚拟继承解析步骤S10解析的中间代码内所描述的各个类,进行是否存在析构函数的确认。
在析构函数存在的情况下,判断该析构函数是否为共通化对象(51164)。
在该析构函数是共通化对象的情况下(S1164的“是”的情况),将针对该析构函数的完全析构函数和部分析构函数的任一方的代码删除(S1165)。并且,将表示完全析构函数的开头地址的标记和表示部分析构函数的开头地址的标记配置到另一方代码的开头(S1165)。
之后,对在虚拟继承解析步骤S10解析的中间代码内所描述的各个类,进一步进行是否存在析构函数的确认。进而,在析构函数存在的情况下,对各个类的析构函数重复进行循环G所示的处理内容。在析构函数不存在的情况下,循环G结束,从而循环G所示的处理也结束。
并且,在S1164若该析构函数不是共通化对象则不进行任何处理(S1164的“否”的情况)。并且,结束循环G的处理。
如以上所述,在特殊函数共通化步骤S11,按照虚拟继承解析步骤S10的解析结果,使被生成的冗长的多个构造函数或多个析构函数共通化。据此,可以删除被生成的冗长的函数的完全构造函数和部分构造函数的某一方,从而提高代码生成效率。
如以上所述,通过执行包括虚拟继承解析步骤S10和特殊函数共通化步骤S11的最佳化步骤S4,从而可以在不受是否有类对象的生成或是否有调用的影响下,对没有以虚拟继承定义的类删除生成的冗长的函数(尤其是构造函数和析构函数),从而提高代码生成效率。据此,可以在不受是否有类对象的生成或调用的影响下,实现能够删除被生成的冗长的函数的编译方法。
(实施例)
以下以使用C++语言的例子来对本发明的编译方法进行说明。
图7示出了程序存储部1中所存储的源程序的一个例子。
以下,对输入了图7所示的源程序的情况下的编译方法进行说明。在此,前提条件是,<ex.cpp>以C++模式编译。
在图7所示的源文件<ex.cpp>中定义了四个类(X、Y、Z、U)。在图7中,对于四个类(X、Y、Z、U)的各个构造函数定义,分别以(1)~(4)示出。同样,对于四个类(X、Y、Z、U)的各个析构函数定义,分别以(5)~(8)示出。
图8至图10示出了以以往的方法进行编译的情况下的汇编输出结果。并且,图8至图10示出的是以gcc version 3.3.6 release编译器附加了最佳化选项时的汇编输出结果。在此,为了便于说明,将以“.L”开始的标记除外。
在以往的方法中,如图8至图10所示,各个类的构造函数定义和析构函数定义,被分别无条件地转换为完全构造定义以及部分构造定义和完全析构函数定义以及部分析构函数定义的代码。图7中所示出的构造函数以及析构函数,和图8至图10所示出的完全构造函数以及部分构造函数,和完全析构函数以及部分析构函数的对应关系如以下“表1”和“表2”所示。
(表1)
---------------------------------------------------------------------------
构造函数 完全构造函数 部分构造函数
---------------------------------------------------------------------------
(1) X::X() → _ZN1XC1Ev _ZN1XC2Ev
(2) Y::Y() → _ZN1YC1Ev _ZN1YC2Ev
(3) Z::Z() → _ZN1ZC1Ev _ZN1ZC2Ev
(4) U::U() → _ZN1UC1Ev _ZN1UC2Ev
(表2)
---------------------------------------------------------------------------
析构函数 完全析构函数 部分析构函数
---------------------------------------------------------------------------
(5) X::~X() → _ZN1XD1Ev _ZN1XD2Ev
(6) Y::~Y() → _ZN1YD1Ev _ZN1YD2Ev
(7) Z::~Z() → _ZN1ZD1Ev _ZN1ZD2Ev
(8) U::~U() → _ZN1UD1Ev _ZN1UD2Ev
通过图8至图10可知,“_ZN1XC1Ev”以及“_Z1XC2Ev”的代码、“_ZN1ZC1Ev”以及“_ZN1ZC2Ev”的代码、“_ZN1XD1Ev”以及“_Z1XD2Ev”的代码、和“_ZN1ZD1Ev”以及“_ZN1ZD2Ev”的代码均是由完全相同的汇编代码生成,并且被生成的代码是冗长的。
以下,以使用C++语言的例子,示出本实施例中的编译方法。
在中间代码生成步骤生成的中间代码在虚拟继承解析步骤S10,按照每个类定义,由图2所示的循环A的处理内容来执行。在本实施例中,图7所示的四个类定义(X、Y、Z、U)成为对象。
在图7中,类X由于类定义没有通过虚拟继承被执行,因此类X的构造函数“X::X()”以及析构函数“X::~X()”作为共通化对象被记录。
图11示出了表示是否为共通化对象的共通化对象判定标志的内容。
如图11所示,在类X的构造函数中间代码以及类X的析构函数中间代码的共通化对象判定标志中,记录“TRUE”。这样,通过记录表示作为共通化对象的共通化判定标志,从而类X的构造函数“X::X()”以及析构函数“X::~X()”作为共通化对象被记录。
并且,在图7中,由于类Y利用关键字“virtual”从类X通过虚拟继承,类定义被执行,因此类Y的构造函数“Y::Y()”以及析构函数“Y::~Y()”不作为共通化对象记录。
在此,例如图11所示,通过在类Y的构造函数中间代码以及类Y的析构函数中间代码的共通化对象判定标志中记录“FALSE”,从而记录不是共通化对象。
并且,在图7中,类Z从类X继承,由于不是虚拟继承,并且被继承的类X也没有通过虚拟继承被执行类定义,因此类Z的构造函数“Z::Z()”以及析构函数“Z::~Z()”作为共通化对象被记录。
在此,例如图11所示,通过在类Z的构造函数中间代码以及类Z的析构函数中间代码的共通化对象判定标志中记录“TRUE”,从而记录是共通化对象。
并且,在图7中,类U从类Y和类Z继承,虽然没有进行虚拟继承,但被继承的类Y是通过虚拟继承而被定义的。因此,类U的构造函数“U::U()”以及析构函数“U::~U()”不作为共通化对象被记录。
在此,例如图11所示,通过在类U的构造函数中间代码以及类U的析构函数中间代码的共通化对象判定标志中记录“FALSE”,从而记录不是共通化对象。
并且,图11所示的共通化对象判定标志是表示是否为共通化对象的信息的一个形态,只要能够在特殊函数共通化步骤S11能够被参考,即可以是上述例子中的中间代码内的数据,也可以是与类相关联起来的独立的数据。
接着,按照上述的虚拟继承解析步骤S10中的解析结果,特殊函数共通化步骤S11被执行。
在图5的特殊函数共通化步骤S11执行的处理内容的第一个例子中,执行了循环D的处理内容和循环E的处理内容。在本实施例中,在特殊函数共通化步骤S11,通过参考图11所示的共通化判定标志,从而可以根据虚拟继承解析步骤S10的解析结果,将生成的冗长的多个构造函数或多个析构函数共通化。根据图11,类X以及类Z的构造函数和析构函数成为共通化对象。
因此,在完全构造函数和部分构造函数的某一方的调用指令被替换为另一方的调用指令之后,删除被替换后的构造函数的代码。
在本实施例中,将部分构造函数的调用替换为完全构造函数的调用,并删除部分构造函数(循环D的处理)。关于析构函数也进行同样的处理(循环E的处理)。进行上述处理的结果在图12至图14示出。
图12至图14示出了以本发明的方法进行编译的情况下的汇编输出结果。
图中的★标记以及下线部分所示出的是,被替换的完全构造函数调用指令以及完全析构函数调用指令。
并且,方框内的部分是在特殊函数共通化步骤S11,被删除的部分构造函数代码以及部分析构函数代码。
从图12至图14的汇编输出结果可知,冗长的代码已被删除。
并且,对特殊函数共通化步骤S11的图6中的第二个例子进行以下说明。在图6中的特殊函数共通化步骤S11执行的处理内容的第二个例子中,首先,执行循环F的处理内容和循环G的处理内容。与图5同样,在本实施例中,在特殊函数共通化步骤S11,通过参考图11所示的共通化判定标志,从而可以根据虚拟继承解析步骤S10的解析结果,将被生成的冗长的多个构造函数或多个析构函数共通化。根据图11,类X以及类Z的构造函数和析构函数成为共通化对象。
因此,在删除完全构造函数和部分构造函数的某一方的代码后,将表示完全构造函数的开头地址的标记和表示部分构造函数的开头地址的标记配置到另一方的代码的开头。在本具体例子中,删除部分构造函数(循环F的处理)。关于析构函数也进行同样的处理(循环G的处理)。进行了上述处理的结果在图15至图17中示出。
图15至图17示出了以本发明的方法进行编译的情况下的汇编输出结果。
图中方框内的部分是被删除的部分构造函数代码以及部分析构函数代码,★记号以及下线部分是表示新被配置的部分构造函数或部分析构函数的开头地址的标记。
根据图15至图17的汇编输出结果,可以得知冗长的代码已被删除。
另外,虚拟继承解析步骤S10为图3以及图4所示的处理内容的情况下,除通过由用户控制的语言规范是否包含虚拟继承,来将构造函数或析构函数作为共通化对象以外,与图2的形态一样。
作为图3所示的处理内容的具体例子,例如在程序中,保证在EC++(embedded_c++)语言规范内描述的编译指示如“#pragma_embedded_c++”语言规范控制语句存在的情况下,由于虚拟继承不属于EC++语言规范,因此将所有的类的构造函数以及析构函数作为共通化对象。因此,与上述的实施例同样,通过执行特殊函数共通化步骤S11,从而可以删除冗长的代码。
作为图4所示的处理内容的具体例子,例如当发出指定以EC++语言模式对编译器进行编译的选项的情况下,由于虚拟继承不属于EC++语言规范,因此将所有的类的构造函数以及析构函数作为共通化对象,所述选项例如是“--embedded_c++”。因此,与上述同样,通过进行特殊函数共通化步骤S11,从而可以删除冗长的代码。
如以上所述,根据本发明的编译方法以及编译程序,通过执行包括虚拟继承解析步骤S10和特殊函数共通化步骤S11的最佳化步骤S4,从而可以不受是否有类对象的生成或调用的影响,就可以实现能够删除被生成的冗长的函数的编译方法。
以上虽然通过实施例,对本发明的编译方法以及编译程序进行了说明,但本发明并非受实施例所限。只要不超脱本发明的主旨,以本实施例执行的本领域技术人员能够想到的各种变形例,或组合在不同的实施例中的处理内容并构筑的形态,均包含在本发明的范围内。
本发明可以利用于编译方法以及编译程序,尤其可以利用于移动电话或个人数字助理(Personal Digital Assistant:PDA)等,需要代码大小较小的对象代码的组装设备中所使用的程序的编译方法以及编译程序。
Claims (21)
1.一种编译方法,将以面向对象语言描述的、且至少具有一个类的输入程序转换为目标程序,其特征在于,包括:
虚拟继承解析步骤,解析所述输入程序中的所述类是否以虚拟继承被定义;
特殊函数共通化步骤,在所述虚拟继承解析步骤的解析结果为,所述类没有以虚拟继承被定义的情况下,生成将所述类的多个构造函数以及多个析构函数的至少一方共通化的代码;以及
生成步骤,生成包含在特殊函数共通化步骤生成的所述代码的目标程序。
2.如权利要求1所述的编译方法,其特征在于,
在所述虚拟继承解析步骤,根据所述输入程序中所描述的类定义,解析所述类是否以虚拟继承被定义了。
3.如权利要求1所述的编译方法,其特征在于,
在所述虚拟继承解析步骤,根据语言规范控制语句,来解析所述类是否以虚拟继承被定义了,所述语言规范控制语句是遵从语言规范在所述输入程序中被描述的控制语句。
4.如权利要求1所述的编译方法,其特征在于,
在所述虚拟继承解析步骤,根据语言规范控制指令,来解析所述类是否以虚拟继承被定义了,所述语言规范控制指令是遵从编译所述输入程序的编译系统的语言规范而被描述的控制指令。
5.如权利要求1所述的编译方法,其特征在于,
在所述特殊函数共通化步骤,生成将没有以虚拟继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数共通化的代码,所述完全构造函数是指,在生成构成类对象的完全类对象时被调用的构造函数,而不是在生成部分类对象时被调用的构造函数,所述部分构造函数是指,在生成构成类对象的部分类对象时被调用的构造函数。
6.如权利要求5所述的编译方法,其特征在于,
在所述特殊函数共通化步骤,生成将没有以虚拟继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函数共通化的代码,所述完全析构函数是指,在生成构成类对象的完全类对象时被调用的析构函数,而不是在生成部分类对象时被调用的析构函数,所述部分析构函数是指,在生成构成类对象的部分类对象时被调用的析构函数。
7.如权权利要求1所述的编译方法,其特征在于,
在所述特殊函数共通化步骤,将没有以虚拟继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数的某一方的调用指令替换为另一方的调用指令,并通过删除作为被替换的调用指令的构造函数的所述一方的构造函数的代码,从而生成将所述类的完全构造函数和部分构造函数共通化的代码。
8.如权利要求7所述的编译方法,其特征在于,
在所述特殊函数共通化步骤,将没有以虚拟继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函数的某一方的调用指令替换为另一方的调用指令,并通过删除作为被替换的调用指令的析构函数的所述一方的析构函数的代码,从而生成将所述类的完全析构函数和部分析构函数共通化的代码。
9.如权利要求1所述的编译方法,其特征在于,
在所述特殊函数共通化步骤,删除没有以虚拟继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数中某一方的代码,并通过将表示完全构造函数的开头地址的标记和表示部分构造函数的开头地址的标记配置到没有被删除的另一方代码的开头,从而生成将所述类的完全构造函数和部分构造函数共通化的代码。
10.如权利要求9所述的编译方法,其特征在于,
在所述特殊函数共通化步骤,删除没有以虚拟继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函数中某一方的代码,并通过将表示完全析构函数的开头地址的标记和表示部分析构函数的开头地址的标记配置到没有被删除的另一方代码的开头,从而生成将所述类的完全析构函数和部分析构函数共通化的代码。
11.一种编译程序,进行下述编译,将以面向对象语言描述的,且至少具有一个类的输入程序转换为目标程序,并使计算机执行以下步骤:
虚拟继承解析步骤,解析所述输入程序中的所述类是否以虚拟继承被定义;
特殊函数共通化步骤,在所述虚拟继承解析步骤的解析结果为,所述类没有以虚拟继承被定义的情况下,生成将所述类的多个构造函数以及多个析构函数的至少一方共通化的代码;以及
生成步骤,生成包含在特殊函数共通化步骤生成的所述代码的目标程序。
12.如权利要求11所述的编译程序,其特征在于,
在所述虚拟继承解析步骤,根据所述输入程序中所描述的类定义,解析所述类是否以虚拟继承被定义了。
13.如权利要求11所述的编译程序,其特征在于,
在所述虚拟继承解析步骤,根据语言规范控制语句,来解析所述类是否以虚拟继承被定义了,所述语言规范控制语句是遵从语言规范在所述输入程序中被描述的控制语句。
14.如权利要求11所述的编译程序,其特征在于,
在所述虚拟继承解析步骤,根据语言规范控制指令,来解析所述类是否以虚拟继承被定义了,所述语言规范控制指令是遵从编译所述输入程序的编译系统的语言规范而被描述的控制指令。
15.如权利要求11所述的编译程序,其特征在于,
在所述特殊函数共通化步骤,生成将没有以虚拟继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数共通化的代码,所述完全构造函数是指,在生成构成类对象的完全类对象时被调用的构造函数,而不是在生成部分类对象时被调用的构造函数,所述部分构造函数是指,在生成构成类对象的部分类对象时被调用的构造函数。
16.如权利要求15所述的编译程序,其特征在于,
在所述特殊函数共通化步骤,生成将没有以虚拟继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函数共通化的代码,所述完全析构函数是指,在生成构成类对象的完全类对象时被调用的析构函数,而不是在生成部分类对象时被调用的析构函数,所述部分析构函数是指,在生成构成类对象的部分类对象时被调用的析构函数。
17.如权利要求11所述的编译程序,其特征在于,
在所述特殊函数共通化步骤,将没有以虚拟继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数的某一方的调用指令替换为另一方的调用指令,并通过删除作为被替换的调用指令的构造函数的所述一方的构造函数的代码,从而生成将所述类的完全构造函数和部分构造函数共通化的代码。
18.如权利要求17所述的编译程序,其特征在于,
在所述特殊函数共通化步骤,将没有以虚拟继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函数的某一方的调用指令替换为另一方的调用指令,并通过删除作为被替换的调用指令的析构函数的所述一方的析构函数的代码,从而生成将所述类的完全析构函数和部分析构函数共通化的代码。
19.如权利要求11所述的编译程序,其特征在于,
在所述特殊函数共通化步骤,删除没有以虚拟继承被定义的所述类的多个构造函数中的完全构造函数和部分构造函数中某一方的代码,并通过将表示完全构造函数的开头地址的标记和表示部分构造函数的开头地址的标记配置到没有被删除的另一方代码的开头,从而生成将所述类的完全构造函数和部分构造函数共通化的代码。
20.如权利要求19所述的编译程序,其特征在于,
在所述特殊函数共通化步骤,删除没有以虚拟继承被定义的所述类的多个析构函数中的完全析构函数和部分析构函数中某一方的代码,并通过将表示完全析构函数的开头地址的标记和表示部分析构函数的开头地址的标记配置到没有被删除的另一方代码的开头,从而生成将所述类的完全析构函数和部分析构函数共通化的代码。
21.一种编译装置,执行下述编译方法,将以面向对象语言描述的,且至少具有一个类的输入程序转换为目标程序,其特征在于,包括:
虚拟继承解析单元,解析所述输入程序中的所述类是否以虚拟继承被定义;
特殊函数共通化单元,在所述虚拟继承解析单元的解析结果为,所述类没有以虚拟继承被定义的情况下,生成将所述类的多个构造函数以及多个析构函数的至少一方共通化的代码;以及
生成单元,生成包含在特殊函数共通化单元生成的所述代码的目标程序。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2008009787A JP2009169864A (ja) | 2008-01-18 | 2008-01-18 | コンパイル方法およびコンパイルプログラム |
JP009787/2008 | 2008-01-18 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101488095A true CN101488095A (zh) | 2009-07-22 |
Family
ID=40877471
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2009100034882A Pending CN101488095A (zh) | 2008-01-18 | 2009-01-15 | 编译方法以及编译程序 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20090187897A1 (zh) |
JP (1) | JP2009169864A (zh) |
CN (1) | CN101488095A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697135B (zh) * | 2009-10-28 | 2012-06-27 | 东方网力科技股份有限公司 | 一种编译程序的方法及装置 |
CN108459552A (zh) * | 2018-01-31 | 2018-08-28 | 南京拓控信息科技股份有限公司 | 一种智能化面向对象的可编程的自动化控制方法 |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8832686B2 (en) | 2010-10-29 | 2014-09-09 | Microsoft Corporation | Inherited product activation for virtual machines |
DE102012006310A1 (de) * | 2012-03-28 | 2013-10-02 | Lear Corporation Gmbh | Kraftfahrzeugsteuergerät und zugehörige Anwendung mit verringertem Speicherbedarf |
EP3065051A1 (en) * | 2015-03-05 | 2016-09-07 | Ingo Josopait | Flow control for language-embedded programming in general-purpose computing on graphics processing units |
US11163546B2 (en) * | 2017-11-07 | 2021-11-02 | Intel Corporation | Method and apparatus for supporting programmatic control of a compiler for generating high-performance spatial hardware |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5867709A (en) * | 1995-10-18 | 1999-02-02 | Kapre Software, Inc. | Method and system for reusing customizations to a software product |
JP2003050700A (ja) * | 2001-08-06 | 2003-02-21 | Matsushita Electric Ind Co Ltd | プログラム変換方法 |
CN1577266A (zh) * | 2003-06-26 | 2005-02-09 | 松下电器产业株式会社 | 程序变换方法、程序及存储媒体 |
US20060123198A1 (en) * | 2004-12-06 | 2006-06-08 | Shinobu Asao | Compiling method |
US20060130014A1 (en) * | 2004-11-19 | 2006-06-15 | Matsushita Electric Industrial Co., Ltd. | Program converting method |
CN1896954A (zh) * | 2006-04-27 | 2007-01-17 | 南京联创科技股份有限公司 | 用于复杂多业务的动态编译器的构件化实现 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2000259427A (ja) * | 1999-03-11 | 2000-09-22 | Matsushita Electric Ind Co Ltd | プログラム変換装置 |
JP2002116917A (ja) * | 2000-10-05 | 2002-04-19 | Fujitsu Ltd | オブジェクト指向型プログラミング言語によるソース・プログラムをコンパイルするコンパイラ |
US7346897B2 (en) * | 2002-11-20 | 2008-03-18 | Purenative Software Corporation | System for translating programming languages |
JP2005141380A (ja) * | 2003-11-05 | 2005-06-02 | Matsushita Electric Ind Co Ltd | テンプレートコンパイル方法 |
JP4822817B2 (ja) * | 2005-11-22 | 2011-11-24 | パナソニック株式会社 | コンパイルシステム |
JP2007304840A (ja) * | 2006-05-11 | 2007-11-22 | Matsushita Electric Ind Co Ltd | コンパイル方法、デバッグ方法、コンパイルプログラムおよびデバッグプログラム |
-
2008
- 2008-01-18 JP JP2008009787A patent/JP2009169864A/ja active Pending
- 2008-12-05 US US12/329,014 patent/US20090187897A1/en not_active Abandoned
-
2009
- 2009-01-15 CN CNA2009100034882A patent/CN101488095A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5867709A (en) * | 1995-10-18 | 1999-02-02 | Kapre Software, Inc. | Method and system for reusing customizations to a software product |
JP2003050700A (ja) * | 2001-08-06 | 2003-02-21 | Matsushita Electric Ind Co Ltd | プログラム変換方法 |
CN1577266A (zh) * | 2003-06-26 | 2005-02-09 | 松下电器产业株式会社 | 程序变换方法、程序及存储媒体 |
US20060130014A1 (en) * | 2004-11-19 | 2006-06-15 | Matsushita Electric Industrial Co., Ltd. | Program converting method |
US20060123198A1 (en) * | 2004-12-06 | 2006-06-08 | Shinobu Asao | Compiling method |
CN1896954A (zh) * | 2006-04-27 | 2007-01-17 | 南京联创科技股份有限公司 | 用于复杂多业务的动态编译器的构件化实现 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101697135B (zh) * | 2009-10-28 | 2012-06-27 | 东方网力科技股份有限公司 | 一种编译程序的方法及装置 |
CN108459552A (zh) * | 2018-01-31 | 2018-08-28 | 南京拓控信息科技股份有限公司 | 一种智能化面向对象的可编程的自动化控制方法 |
CN108459552B (zh) * | 2018-01-31 | 2021-07-23 | 南京拓控信息科技股份有限公司 | 一种智能化面向对象的可编程的自动化控制方法 |
Also Published As
Publication number | Publication date |
---|---|
JP2009169864A (ja) | 2009-07-30 |
US20090187897A1 (en) | 2009-07-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11036614B1 (en) | Data control-oriented smart contract static analysis method and system | |
CN110096338B (zh) | 智能合约执行方法、装置、设备及介质 | |
US9715593B2 (en) | Software vulnerabilities detection system and methods | |
JP4183399B2 (ja) | 複数言語のコンパイル方法及びシステム | |
US9690554B2 (en) | Unified data type system and method | |
US6738968B1 (en) | Unified data type system and method | |
JP4562918B2 (ja) | インタプリティブ・ランタイム環境のためのコンパイル・プログラムの生成 | |
US7627594B2 (en) | Runtime support for nullable types | |
US8549502B2 (en) | Compiler with user-defined type inference rules | |
US10114745B2 (en) | Assisted garbage collection in a virtual machine | |
US7743368B2 (en) | Method and apparatus for providing class hierarchy information for function devirtualization | |
CN101488095A (zh) | 编译方法以及编译程序 | |
US7685581B2 (en) | Type system for representing and checking consistency of heterogeneous program components during the process of compilation | |
US9311111B2 (en) | Programming environment with support for handle and non-handle user-created classes | |
Huang et al. | ReImInfer: method purity inference for Java | |
US9703576B2 (en) | Aspect scoping in a modularity runtime | |
CN115688108A (zh) | 一种webshell静态检测方法及系统 | |
Li et al. | DepTaint: a static taint analysis method based on program dependence | |
US7555708B2 (en) | Mechanism for converting text output into objects | |
CN117235746B (zh) | 一种基于多维ast融合检测的源代码安全管控平台 | |
Bernat et al. | Compiler Support for WCET Analysis: a Wish List. | |
Abbas et al. | LEARN. NET WITH PROGRAMMING (3-in-1): Covers. NET using C#, Visual Basic ASP. NET | |
Marevac et al. | Design and Implementation of a Virtual Machine for a Dynamic Object-Oriented Programming Language | |
Zhao et al. | DFspliter: Data Flow Oriented Program Partitioning Against Data Stitching Attacks | |
Nagalakshmi et al. | Flexible Language-Agnostic Framework To Emit Informative Compile-Time Error Messages |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20090722 |