编译方法及编译程序的制作方法

xiaoxiao2020-7-22  8

专利名称:编译方法及编译程序的制作方法
技术领域
本发明涉及编译方法及编译程序,尤其涉及将指定了扩展语言规范的输入程序变换为目标程序的编译方法及编译程序。
背景技术
在高级语言(例如C或C++)的编译器中通常准备了扩展语言规范,以便在程序执行环境下获得最高的性能(performance)。其中,程序执行环境是指执行利用高级语言编写的程序的环境。并且,语言规范 (language specification)是指语言的规范,即规定了该语言的语法或语义的规范。并且, 扩展语言规范是指在预先利用语言规范规定的规范之外的、新(扩展地)规定了该语言的语法和语义的规范。换言之,在扩展语言规范中规定了使某个记述(例如式子或语句等) 具有什么样的语义、进行什么样的动作。并且,通过在程序中进行扩展语言规范的指定,能够使编译器执行依照所指定的扩展语言规范所相应的、针对例如式子或语句等记述(以下记载为扩展语言规范语句)的规定的动作。并且,扩展语言规范的指定方法例如有利用命令行中的选项(option)、pragma编译指令(#pragma)或者属性(_attribute_)等进行的指定。但是,随着近年来的程序规模的增大,很难掌握扩展语言规范的指定对程序整体的影响。另外,随着程序执行环境的高功能化,能够指定的扩展语言规范的规定变得详细且复杂,导致频繁地产生某个扩展语言规范的指定(某个扩展语言规范语句)对其它扩展语言规范的指定(其它扩展语言规范语句)造成影响的情况。因此,用户不仅要对程序整体掌握单一的扩展语言规范语句的动作,也必须掌握在指定了多个相关联的扩展语言规范语句时对动作的影响等、多个扩展语言规范语句之间的协调动作。但是,即使是对高级语言比较熟练的用户也很难完全掌握多个扩展语言规范语句之间的协调动作。因此,指定扩展语言规范成为埋下不可预测的缺陷(bug)的主要因素。因此,在现有的扩展语言规范的指定方法中提出了以下方法对用户指定的扩展语言规范(扩展语言规范语句)的候选进行分析,根据该分析结果来自动指定针对对象 (object)的扩展语言规范(扩展语言规范语句)(例如,参照专利文献1)。另外,还提出了以下方法即使用户没有指定扩展语言规范语句,也能够自动插入扩展语言规范语句的指定并修正输入程序,以便实现良好的优化(例如,参照专利文献2)。另外,也提出了进行扩展语言规范语句的指定的检查,以使编译器不会生成错误的目标程序的方法(例如,参照专利文献3)。现有技术文献专利文献专利文献1 日本特开2007-108940号公报专利文献2 日本特开2006-107338号公报
专利文献3 日本特开2006-107339号公报发明概要发明要解决的问题但是,如下面说明的那样,现有的方法存在以下问题,S卩,用户不容易掌握所指定的扩展语言规范语句对输入程序和目标程序产生什么样的影响。下面,说明现有的方法的问题点。图25是表示在现有的方法中所指定的扩展语言规范语句的状态显示的实施例的图。在现有的方法即专利文献1的方法中,用户能够确认所指定的特定的(一个)扩展语言规范语句指定了哪个对象。并且,用户能够确认扩展语言规范语句的指定方法是基于选项的指定、还是基于源程序(source,源)中的记述的指定(例如编译指令等)、或者是基于选项和源程序中的记述双方的指定。但是,专利文献1的方法中,虽然能够确认输入程序上的哪个部位受到了扩展语言规范语句的指定的影响,但是不能确认在进行编译之后输出的目标程序(例如汇编程序)上的哪个部位由于扩展语言规范语句的指定而受到影响。并且,虽然能够掌握在输入程序中指定了什么样的扩展语言规范语句,但是用户不能掌握成为对象的对象(object) 是如何按照该指定的扩展语言规范语句进行变更的(例如,对齐(alignment)值是如何变化的等)。另外,如图25所示,专利文献1的方法中,虽然能够显示特定的一个扩展语言规范语句指定了哪个对象,但是不能从某个对象受到了哪个扩展语言规范语句的影响的观点来进行显示。因此,用户在利用多个扩展语言规范语句对成为对象的对象进行重复指定的情况下,不能确认在该多个扩展语言规范语句中哪个扩展语言规范语句是实际有效的。另外,专利文献2的方法中,虽然能够自动插入扩展语言规范语句并修正输入程序,但是没有考虑被插入的该扩展语言规范语句和已经记载的扩展语言规范语句相对于成为对象的对象的优先度以及有无重复指定。例如提出了如下方案如果判定为将某个扩展语言规范语句A设为有效即可,则单纯插入扩展语言规范语句A即可。但是,如果在程序中与扩展语言规范语句A进行协调动作的扩展语言规范语句B已经记载在程序中,则扩展语言规范语句B的动作将由于扩展语言规范语句A的插入而被变更。这样由于没有考虑到优先度和有无重复指定,存在动作与用户最初期望的程序的动作不同的问题。另外,同样专利文献3的方法也没有考虑已经记载的扩展语言规范语句被重复指定时的影响。例如,即使是通过某个扩展语言规范语句A与扩展语言规范语句B进行协调动作来进行期望的动作的程序,也由于没有考虑到重复指定的影响,而存在只进行扩展语言规范语句A的检查并判定为错误的问题。

发明内容
本发明就是鉴于上述问题而提出的,其目的在于,提供一种编译方法和编译程序, 使用户能够容易掌握所指定的多个扩展语言规范对输入程序和目标程序的影响。用于解决问题的手段本发明的编译方法,将输入程序变换为目标程序,其特征在于,该编译方法包括分析步骤,在对所述输入程序指定了多个扩展语言规范的情况下,对所指定的所述多个扩展语言规范进行分析,由此确定由于所述指定的多个扩展语言规范而受到影响的所述输入程序的部分;以及输出步骤,将与所述部分相关的信息和所述目标程序一起输出。由此,用户能够容易掌握所指定的多个扩展语言规范(扩展语言规范语句)对输入程序和目标程序的影响。并且,优选地,所述分析步骤中,根据对多个扩展语言规范赋予的优先度的规定, 在多个扩展语言规范的指定之中确定有效的扩展语言规范的指定,并确定由于该有效的扩展语言规范的指定而受到影响的所述输入程序的部分,所述输出步骤中,将该有效的扩展语言规范的指定、由于该有效的扩展语言规范的指定而受到影响的所述输入程序中的对象、所述优先度的规定、由于该有效的扩展语言规范而受到影响并被变更的对象的变更内容中的至少一种信息,作为与所述部分相关的信息,和所述目标程序一起输出。并且,优选地,所述输出步骤包括输入程序输出步骤,将与所述部分相关的信息包含在所述输入程序中,与所述目标程序一起输出。由此,用户能够容易掌握由用户指定的多个扩展语言规范(扩展语言规范语句) 如何对输入程序产生影响,验收效率提高。并且,优选地,所述输出步骤包括目标程序输出步骤,将与所述部分相关的信息包含在所述目标程序中,与所述目标程序一起输出。由此,用户能够容易掌握由用户指定的多个扩展语言规范(扩展语言规范语句) 如何对目标程序产生影响,验收效率提高。并且,优选地,所述输出步骤还包括警告输出步骤,根据与所述部分相关的信息, 确认所述输入程序中的对象的对齐是否被变更,在已确认的所述对象的被变更的对齐与所期望的对齐不一致的情况下,输出表示所述对象的对齐中发生未对齐之意的警告。由此,能够在编译时检测由于用户指定了扩展语言规范(扩展语言规范语句)而也许会产生的意外的对象间的未对齐,验收效率提高。并且,优选地,所述输出步骤还包括优化方案输出步骤,根据与所述部分相关的信息,对于包括由于所述扩展语言规范的指定而受到影响的对象的所述输入程序中的全部对象,确认该对象的对齐是否被变更为对于程序执行环境中的传输命令来说最佳的对齐, 在所述输入程序中至少一个对象没有变更为最佳对齐的情况下,输出针对所述至少一个对象的最佳对齐的提示。由此,即使不是精通与程序执行环境相关的信息的程序员,也能够有效地指定用于进行提高代码生成效率的对齐的指定的扩展语言规范(扩展语言规范语句),调整 (tuning)效率提高。并且,优选地,对所述多个扩展语言规范赋予的优先度的规定是被预先规定的。并且,优选地,对所述多个扩展语言规范赋予的优先度的规定,还是由用户规定的,所述分析步骤将由所述用户规定的该优先度的规定作为对所述多个扩展语言规范赋予的优先度的规定。由此,不仅能够指定对扩展语言规范(扩展语言规范语句)事前规定的优先度,也能够由用户另外指定优先度,验收效率提高。另外,本发明不仅能够实现为具有这种特征性步骤的编译方法,也能够实现为把该编译方法中包含的特征性步骤作为处理单元的编译装置,还能够实现为使计算机执行该编译方法中包含的特征性步骤的编译程序。并且,这种编译程序当然能够通过Compact Disc-Read Only Memory (⑶-ROM 只读存储器)等存储介质或因特网等传输介质进行流通。发明效果根据本发明的编译方法,能够实现使用户能够容易掌握所指定的多个扩展语言规范对输入程序和目标程序的影响的编译方法和编译程序。由此,能够削减验收工时。另外,在进行编译时考虑扩展语言规范语句之间的优先度,不仅能够正确检测由于用户在输入程序中指定扩展语言规范语句而也许会产生的意外的未对齐,而且能够使编译器提出提高代码生成效率的对齐指定的扩展语言规范语句。由此,不仅能够削减验收工时,也能够削减用户的程序调整工时。


图1是表示本发明的实施方式的编译方法的特征性处理步骤的图。图2是表示由本发明的实施方式的编译器执行的处理的流程图。图3是表示本发明的实施方式的扩展语言规范分析步骤的处理的流程图。图4是表示本发明的实施方式的扩展语言规范信息输出步骤的处理的流程图。图5是表示本发明的实施方式的带扩展语言规范信息输入程序输出步骤的处理的流程图。图6是表示本发明的实施方式的带扩展语言规范信息目标程序输出步骤的处理的流程图。图7是表示本发明的实施方式的对象间警告输出步骤的处理的流程图。图8是表示本发明的实施方式的优化方案输出步骤的处理的流程图。图9A是表示本发明的实施例1的输入程序和编译时的前提条件的图。图9B是表示本发明的实施例1的输入程序和编译时的前提条件的图。图9C是表示本发明的实施例1的输入程序和编译时的前提条件的图。图9D是表示本发明的实施例1的输入程序和编译时的前提条件的图。图9E是表示本发明的实施例1的输入程序和编译时的前提条件的图。图10是表示本发明的实施例1的、在扩展语言规范信息数据库中登记的针对输入程序的分析结果的表。图11是表示本发明的实施例1的、被附加了针对输入程序的扩展语言规范信息的输入程序的图。图12A是表示本发明的实施例2的输入程序和编译时的前提条件的图。图12B是表示本发明的实施例2的输入程序和编译时的前提条件的图。图12C是表示本发明的实施例2的输入程序和编译时的前提条件的图。图12D是表示本发明的实施例2的输入程序和编译时的前提条件的图。图12E是表示本发明的实施例2的输入程序和编译时的前提条件的图。图13是表示本发明的实施例2的、在扩展语言规范信息数据库中登记的针对输入程序的分析结果的表。图14是表示本发明的实施例2的、被附加了针对输入程序的扩展语言规范信息的输入程序的图。图15是表示本发明的实施例3的、被附加扩展语言规范信息之前的目标程序的图。图16是表示本发明的实施例3的、被附加了扩展语言规范信息之后的目标程序的图。图17是表示本发明的实施例4的输入程序的图。图18是表示本发明的实施例4的、针对输入程序在扩展语言规范信息数据库中登记的扩展语言规范信息的图。图19是表示本发明的实施例4的、针对输入程序附加了未对齐的警告的输入程序的图。图20A是表示本发明的实施例5的输入程序以及对于程序执行环境中的传输命令为最佳的对齐的图。图20B是表示本发明的实施例5的输入程序以及对于程序执行环境中的传输命令为最佳的对齐的图。图21是表示本发明的实施例5的、针对输入程序在扩展语言规范信息数据库中登记的扩展语言规范信息的图。图22是表示本发明的实施例5的输入程序的全部对象、各个对象大小、各个最佳对齐以及各个当前对齐的一览表。图23是表示本发明的实施例5的、针对输入程序附加了优化方案的输入程序的图。图M是表示把本发明的编译方法中包含的特征性步骤作为处理单元的编译装置的结构的图。图25是表示现有方法中的扩展语言规范语句的状态显示的实施例的图。
具体实施例方式下面,使用

本发明的实施方式。图1是表示本发明的实施方式的编译方法的特征性处理步骤的图。如图1所示,本发明的编译方法包括扩展语言规范分析步骤(Si),根据多个扩展语言规范语句的优先度,对与由于用户附加在输入程序中的多个扩展语言规范语句而受到影响的输入程序的部分相关的信息(称为扩展语言规范信息)进行分析。本发明的编译方法包括扩展语言规范信息输出步骤(S3),将在扩展语言规范分析步骤(Si)中分析的扩展语言规范信息作为编译结果而输出,以便显示给用户。并且,本发明的编译方法包括对象间警告输出步骤(S5),根据所分析的扩展语言规范信息来检测对象间的未对齐,并输出表示若进行编译则产生未对齐之意的警告;优化方案输出步骤(S7),输出用于将根据所分析的扩展语言规范信息进一步提高代码性能的扩展语言规范语句的指定方法提示给用户的提示。在扩展语言规范信息输出步骤(S3)中包括带扩展语言规范信息输入程序输出步骤(S32),将扩展语言规范信息附加在输入程序中进行输出;带扩展语言规范信息目标程序输出步骤(S34),将扩展语言规范信息附加在目标程序中进行输出。
并且,在本发明的编译方法中,在进行扩展语言规范分析步骤(Si)后,能够分别独立地进行扩展语言规范信息输出步骤(S3)、对象间警告输出步骤(S5)、优化方案输出步骤(S7)。并且,S3 S7能够根据用户的指示(选项等)分别选择是否进行处理。其中,用户的指示是指被附加在输入程序中的扩展语言规范语句,例如,利用命令行中的选项、编译指令(Spragma)或者属性(_attribute_)等,进行扩展语言规范(扩展语言规范语句)的指定。下面,参照

本发明的实施方式的编译方法。图2是表示由本发明的实施方式的编译器执行的处理的流程图。其中,编译器是指将人利用编程语言记述的软件的设计图(输入程序)变换为计算机能够执行的形式(目标代码)的软件(编译程序)。编译器在具有存储器、CPU的计算机上执行,在将输入程序暂且变换为作为中间代码的汇编语言后,变换为目标程序。下文中,将编译器作为执行本发明的编译方法的程序来进行说明。首先,编译器执行读入输入程序的输入步骤。然后,编译器针对在输入步骤读入的输入程序,根据扩展语言规范的指定状况、即多个扩展语言规范语句的优先度,来执行扩展语言规范分析步骤,即对与由于用户附加在输入程序中的多个扩展语言规范语句而受到影响的输入程序的部分相关的信息进行分析, 并将其分析结果作为扩展语言规范信息登记在扩展语言规范信息数据库51中(Si)。其中,例如扩展语言规范信息是指多个扩展语言规范语句中有效的扩展语言规范语句(下面记述为有效的扩展语言规范语句)、由于扩展语言规范语句而受到影响的对象、在编译中采用的多个扩展语言规范语句的优先度(下面记述为采用的优先度)、以及由于扩展语言规范语句而受到影响并被变更的对象的变更内容(下面记述为对象的变更内容。)。并且,扩展语言规范信息数据库51是存储了扩展语言规范信息的数据库。另外, 扩展语言规范信息数据库51也可以在编译器的外部或者内部被设置为存储部。然后,编译器根据用户的指示(选项等),确认是否输出扩展语言规范信息(S2)。 编译器在输出扩展语言规范信息的情况下(S2 是),执行扩展语言规范信息输出步骤 (S3),即参照扩展语言规范信息数据库51,并且将在扩展语言规范分析步骤(Si)分析的扩展语言规范信息进行输出,以便显示给用户。编译器在执行扩展语言规范信息输出步骤
(53)后,执行步骤S4。另外,编译器在S2确认了未输出扩展语言规范信息的情况下(S2: 否),也执行步骤S4。然后,编译器根据用户的指示(选项等),确认是否对对象间的未对齐进行警告
(54)。编译器在对对象间的未对齐进行警告的情况下(S4 是),执行对象间警告输出步骤(S5),即参照扩展语言规范信息数据库51,并且检测进行编译时的对象间的未对齐,并输出表示若进行编译则产生未对齐之意的警告。编译器在执行对象间警告输出步骤(S5) 后,进入步骤S6。另外,编译器在确认了不对对象间的未对齐进行警告的情况下(34:否),也执行步骤S6。然后,编译器根据用户的指示(选项等),确认是否提示扩展语言规范指定方案(56)。编译器在提示扩展语言规范指定方案的情况下(S6 是),执行优化方案输出步骤
(57),即参照扩展语言规范信息数据库51以及程序执行环境信息,并且输出将进一步提高代码性能的扩展语言规范的指定方法提示给用户的提示。其中,程序执行环境信息是指预先设定的用于优化方案的信息,例如是指预先设定的最佳的对齐信息等。然后,执行其它的编译步骤(S9),并将目标程序和编译结果一起输出。并且,编译器在确认了不提示扩展语言规范指定方案的情况下(S6 否),也执行步骤S9。另外,其它的编译步骤(S9)是与本发明无关的编译步骤,由于不是本发明的重点,所以省略说明。另外,扩展语言规范分析步骤(Si)、扩展语言规范信息输出步骤(S3)、对象间警告输出步骤(SO和优化方案输出步骤(S7)不一定在开始编译后就马上进行,也可以在语法分析或者语义分析等其它编译步骤之后进行。下面,依次说明作为本发明的主旨的扩展语言规范分析步骤(Si)、扩展语言规范信息输出步骤(S3)、对象间警告输出步骤(S。和优化方案输出步骤(S7)。图3是表示本发明的实施方式的扩展语言规范信息分析步骤的处理的流程图。在扩展语言规范分析步骤(Si),编译器对在输入程序中定义的每个对象反复进行以下处理(记载为循环A。)。首先,编译器进行是否在输入程序中指定了对对象产生影响的扩展语言规范的判定(S12)。在此,在没有指定的情况下(S12:否),编译器对下一个对象进行循环A的处理。然后,当在输入程序中指定了对对象产生影响的扩展语言规范语句的情况下 (S12 是),编译器进行是否在输入程序中对对象重复指定了扩展语言规范语句的判定 (S13)。在没有重复指定的情况下(S13 否),编译器将有效的扩展语言规范语句、受到扩展语言规范语句的影响的对象和对象变更内容,作为扩展语言规范信息登记在扩展语言规范信息数据库51中(S14)。并且,对下一个对象进行循环A的处理。然后,在重复指定了扩展语言规范语句的情况下(S13 是),编译器进行是否由用户另外指定了扩展语言规范语句的优先度的判定(S15)。在没有另外指定的情况下(S15: 否),编译器将有效的扩展语言规范语句、受到扩展语言规范语句的影响的对象、作为所采用的优先度而由编译器事前规定的优先度、和对象变更内容,作为扩展语言规范信息登记在扩展语言规范信息数据库51中(S16)。并且,对下一个对象进行循环A的处理。然后,编译器在由用户另外指定了扩展语言规范语句的优先度的情况下(S15 是),将有效的扩展语言规范语句、受到扩展语言规范语句的影响的对象、作为所采用的优先度而由用户指定的优先度、和对象变更内容,作为扩展语言规范信息登记在扩展语言规范信息数据库51中(S17)。并且,对下一个对象进行循环A的处理。按照以上所述,编译器执行扩展语言规范分析步骤(Si)。图4是表示本发明的实施方式的扩展语言规范信息输出步骤的处理的流程图。在扩展语言规范信息输出步骤(S3),首先,编译器进行是否对输入程序进行用于附加扩展语言规范信息的输出的判定(S31)。在对输入程序进行输出的情况下(S31 是), 编译器执行带扩展语言规范信息输入程序输出步骤(S32)。编译器在执行带扩展语言规范信息输入程序输出步骤(S3》后,执行步骤S33。另外,编译器在S31判定为不对输入程序进行用于附加扩展语言规范信息的输出的情况下(S31 否),也执行下一个步骤S33。然后,编译器进行是否对目标程序进行用于附加扩展语言规范信息的输出的判定 (S33)。在对目标程序进行输出的情况下(S33:是),编译器执行带扩展语言规范信息目标程序输出步骤(S34)。编译器在执行带扩展语言规范信息目标程序输出步骤(S34)后,执行下一个步骤S4。另外,编译器在S33判定为不对目标程序进行用于附加扩展语言规范信息的输出的情况下(S33 否),也执行下一个步骤S4。按照以上所述,编译器执行扩展语言规范信息输出步骤(S3)。图5是表示本发明的实施方式的带扩展语言规范信息输入程序输出步骤的处理的流程图。在带扩展语言规范信息输入程序输出步骤(S32),首先,编译器记录输入程序中的各个对象的定义部位(S321)。然后,对在扩展语言规范数据库中登记的全部对象中的每一个对象反复进行以下处理(记载为循环B。)。在此,关于输入程序中的各个对象的定义部位,可以记录在扩展语言规范信息数据库51中,也可以是编译器具有临时记录部,并记录在该临时记录部中。在循环B中,编译器针对在S321记录的对象定义部位,将包括受到扩展语言规范语句的影响的对象、有效的扩展语言规范语句、采用的优先度和对象变更内容的扩展语言规范信息,作为备注(comment)插入到输入程序中(S323)。然后,编译器对在扩展语言规范数据库51中登记的全部对象中的每一个对象反复进行循环B的处理后,输出附加了备注的输入程序(S324)。并且,执行下一个步骤S33。按照以上所述,编译器执行带扩展语言规范信息输入程序输出步骤(S32)。另外,编译器将扩展语言规范信息作为备注插入到输入程序中并进行附加,由此输出编译结果,但不限于这种方式,例如,也可以只将扩展语言规范信息作成文本文件等另外的文件,并输出编译结果。图6是表示本发明的实施方式的带扩展语言规范信息目标程序输出步骤的处理的流程图。在带扩展语言规范信息目标程序输出步骤(S34)中,首先编译器事前生成目标程序,并记录各个对象的定义部位(S341)。然后,针对在扩展语言规范信息数据库51中登记的全部对象,对每个对象反复进行以下处理(记载为循环C。)。在此,关于事前生成的目标程序和各个对象的定义部位,可以记录在扩展语言规范信息数据库51中,也可以是编译器具有临时记录部,并记录在该临时记录部中。在循环C中,编译器针对在S341记录的对象的定义部位,将包括受到扩展语言规范语句的影响的对象、有效的扩展语言规范语句、采用的优先度和对象变更内容的扩展语言规范信息,作为备注插入到目标程序中(S343)。然后,编译器对在扩展语言规范数据库51中登记的全部对象中的每一个对象反复进行循环C的处理,然后输出附加了备注的目标程序(S344)。并且,执行下一个步骤S4。按照以上所述,编译器执行带扩展语言规范信息目标程序输出步骤(S34)。另外,编译器将扩展语言规范信息作为备注插入到目标程序中并进行附加,由此输出编译结果,但不限于这种方式,例如,也可以只将扩展语言规范信息作成文本文件等另外的文件,并输出编译结果。并且,扩展语言规范信息也可以包括除受到扩展语言规范语句的影响的对象、有效的扩展语言规范语句、采用的优先度和对象变更内容之外的内容。例如,扩展语言规范信息也可以包括在由于所指定的扩展语言规范语句而受到影响的编译过程中的汇编命令、将对扩展语言规范语句的指定设为无效时的编译过程中的汇编命令。图7是本发明的实施方式的对象间警告输出步骤的处理流程图。在对象间警告输出步骤(S5),编译器对正在参照在扩展语言规范信息数据库51 中登记的对象之中对齐被变更的对象的输入程序的式子或者语句,反复执行以下处理(记载为循环D。)。在循环D中,首先编译器进行检查在对齐被变更的对象中相应对象的对齐、与在正在参照相应对象的式子或者语句中所期望的对齐是否不存在未对齐(S52)。如果不存在未对齐(S52 是),编译器对下一个输入程序的式子或者语句进行循环D的处理。然后,如果在这些对齐中存在未对齐(S52 否),编译器输出用于显示给用户的、 附加了扩展语言规范信息的警告消息(S53),该扩展语言规范信息包括在相应的式子或者相应语句的部位处于未对齐的对象中的有效的扩展语言规范语句、受到扩展语言规范语句的影响的对象、和对象变更内容。并且,对下一个相应的式子或者语句进行循环D的处理。按照以上所述,编译器执行对象间警告输出步骤(S5)。另外,以上说明了编译器输出警告消息并进行显示,但不限于这种方式,例如,也可以是输出包括警告消息的输入程序,还可以是将警告消息作为文本文件等另外的文件进行输出。图8是表示本发明的实施方式的优化方案输出步骤的处理的流程图。在优化方案输出步骤(S7)中,编译器对输入程序的全部对象反复执行以下处理 (记载为循环处理E。)。 在循环E中,首先编译器获取对于各个对象中的相应程序执行环境中的传输命令为最佳的对齐(S72)。该最佳的对齐信息可以事前登记在编译器中,也可以由用户另外输入。并且,程序执行环境是指作为用于执行利用高级语言编写的程序的基础的程序。然后,编译器进行相应对象的对齐是否达到最佳对齐的判定(S7!3)。另外,S73说明了通过扩展语言规范指定,被变更的相应对象的对齐是否达到最佳对齐的判定,但也可以不根据扩展语言规范指定。编译器在判定为达到最佳对齐的情况下(S73 是),对下一个相应的对象进行循环E的处理。相反,编译器在判定为没有达到最佳对齐的情况下(S73 否),输出被附加了期望的扩展语言规范语句和对象变更内容的方案消息,并进行显示(S74)。并且,对下一个相应的对象进行循环E的处理。按照以上所述,编译器执行优化方案输出步骤(S7)。另外,以上说明了编译器输出方案消息并进行显示,但不限于这种方式,例如,也可以是输出包括方案消息的输入程序,还可以是将方案消息作为文本文件等另外的文件进行输出。
按照以上所述,编译器通过执行扩展语言规范分析步骤(Si)、扩展语言规范信息输出步骤(S3)、对象间警告输出步骤(SO和优化方案输出步骤(S7),能够实现使用户能够容易掌握所指定的多个扩展语言规范语句对输入程序和目标程序的影响的编译方法及编译程序。S卩,根据本发明的编译方法,用户能够容易掌握利用现有技术不能掌握的内容, 即由于用户指定扩展语言规范而对输入程序和目标程序产生什么样的影响,能够削减用户进行的验收工时。并且,根据本发明的编译方法,能够在编译时检测由于指定了扩展语言规范而也许会产生的意外的未对齐,能够削减验收工时。另外,由于能够由编译器输出用于指定提高代码生成效率的对齐的扩展语言规范,因而能够削减用户的程序调整工时。下面,参照输入程序的具体示例来详细说明本发明的编译方法的实施例。(实施例1)图9A 图9E是表示本发明的实施例1的输入程序和编译时的前提条件的图。图 9A 图9D表示编译时的前提条件,图9E表示输入程序。如图9E所示,输入程序由testl. h和testl. cc构成。并且,在图9A 图9D中,作为编译时的前提条件示出了由用户指定的扩展语言规范语句的内容、由编译器事前规定的优先度、和在编译时指定的命令行的选项的内容。并且,作为其它前提条件,对输入程序输出扩展语言规范信息,而不对目标程序进行输出。并且,假设由用户指定不进行对象间的未对齐的警告,并不提示扩展语言规范指定方案。并且,假设用户不进行扩展语言规范语句的优先度指定。首先,在由编译器开始编译后,依次执行扩展语言规范分析步骤(Si)的子步骤。 即,执行图3所示的扩展语言规范分析步骤(Si)的循环A的处理。对图9E示出的输入程序testl. cc中的对象χ、y、ζ分别进行循环A的处理。按照图9D和图9Ε所示,对对象χ重复指定扩展语言规范中的3个扩展语言规范语句。具体地讲,一个是对程序中的构造体对象整体的指定,即在图9D的前提条件中示出的命令行选项的“-falign-struct = 16”。另一个是在图9E的输入程序中指定的编译指令指定的“#pragma_align_type = 2A” (由于对象χ的类型是Α)。再另一个是在图9Ε的输入程序中指定的“#pragma_align_0bject = 8x” (由于是对对象χ的指定)。因此,由于编译器进行的S12的判定为是,而且后续S13的判定也为是,所以编译器进入S15。并且,根据上述前提条件,不由用户进行扩展语言规范语句的优先度指定,因而编译器进行的S15的判定为否,并进入S16。然后,在S16根据图9C所示的由编译器事前规定(定义)的优先度,选择优先度最高的“#pragma_align_0bject = 8x”作为重复指定的扩展语言规范语句之中有效的扩展语言规范语句。因此,在S16,将有效的扩展语言规范语句、受到影响的对象、由编译器事前规定的优先度以及对象变更内容,作为扩展语言规范信息登记在扩展语言规范信息数据库51中。并且,按照图9D和图9E所示,对对象y重复指定两个扩展语言规范语句。具体地讲,一个是图9D所示的命令行选项的“-falign-struct = 16”。另一个是在图9E的输入程序中指定的编译指令指定的“#pragma_align_type = 2A” (由于对象y的类型是A)。因此,由于编译器进行的S12的判定为是,而且后续S13的判定也为是,所以编译器进入S15。并且,根据上述前提条件,由编译器进行的S15的判定为否,并进入S16。然后,在S16根据图9C所示的由编译器事前规定的优先度,选择优先度更高的 "#pragma_align_type = 2A”作为重复指定的扩展语言规范语句之中有效的扩展语言规范语句。因此,在S16,将与对象χ相同的扩展语言规范信息登记在扩展语言规范信息数据库 51中。并且,对于对象z,只将图9D所示的命令行选项的“-falign-struct = 16”指定为扩展语言规范信息。因此,编译器进行的S12的判定为是,而后续S13的判定为否。因此, 由编译器执行S14,将有效的扩展语言规范语句、受到影响的对象以及对象变更内容,作为扩展语言规范信息登记在扩展语言规范信息数据库51中。图10是表示本发明的实施例1的在扩展语言规范信息数据库中登记的针对输入程序的分析结果的表。图10是表示登记了扩展语言规范分析步骤(Si)的分析结果的扩展语言规范信息的表,是表示登记了有关此处说明的对象X、y和Z的扩展语言规范信息的结果的表。并且,然后由编译器执行S2的判定。根据上述前提条件,由于指定了编译器向输入程序输出扩展语言规范信息,所以S2的判定为是,并执行扩展语言规范信息输出步骤 (S3)。在扩展语言规范信息输出步骤(S3),由于S31的判定为是,所以执行带扩展语言规范信息输入程序输出步骤(S32)。然后,执行图5所示的S32的子步骤。在S32,首先执行S321,编译器将输入程序中的各个对象的定义部位记录为临时数据。在本实施例中,对象χ是testl.cc的第4行10栏,对象y是testl.cc的第4行13 栏,对象ζ是testl. cc的第5行10栏。然后,执行循环B的处理,编译器对对象x、y和ζ执行S323。由于已在S321记录了相应对象的定义部位,所以在该定义部位分别将受到影响的对象、有效的扩展语言规范语句、采用的优先度以及对象变更内容(分别登记在扩展语言规范信息数据库51中)作为备注插入到输入程序中。并且,在S3M,编译器输出被附加了该备注的输入程序。图11表示被附加了扩展语言规范信息的输入程序的输出示例。图11是表示本发明的实施例1的被附加了针对输入程序的扩展语言规范信息的输入程序的图。根据图11可知,用户能够容易掌握利用现有技术不能掌握的内容,即通过由用户指定扩展语言规范语句而对输入程序中的各个对象产生了什么样的影响。并且,根据上述前提条件,在实施例1中不执行334、35、37,而执行39,编译器结束处理。按照以上的实施例1所示,通过由编译器进行扩展语言规范分析步骤(Si)、扩展语言规范信息输出步骤(S3),用户能够容易掌握由用户指定的扩展语言规范对输入程序的影响。由此,能够削减验收工时。(实施例2)图12A 图12E是表示本发明的实施例2的输入程序和编译时的前提条件的图。 图12A 图12D表示编译时的前提条件,图12E表示输入程序。在图12A 图12D中表示与实施例1的图9A 图9D所示的前提条件基本相同,但是扩展语言规范语句的优先度不是由编译器事前规定的优先度,而是由用户另外指定的优先度的情况。即,在图12A 图12D 中,除扩展语言规范语句的优先度之外的前提条件与实施例1相同。
在这种情况下,由于执行与实施例1相同的处理,所以省略说明。在实施例2中, 由于由用户另外指定优先度,所以由编译器进行的S15的判定为是,并进入S17。然后,在S17,针对被重复指定了扩展语言规范语句的对象,选择图12C所示的优先度为最高的命令行选项“-falign-struct = 16”。因此,在S17,将有效的扩展语言规范语句、受到影响的对象、用户指定的优先度以及对象变更内容,作为扩展语言规范信息登记在扩展语言规范信息数据库51中。图13是表示本发明的实施例2的在扩展语言规范信息数据库中登记的针对输入程序的分析结果的表。图14是表示本发明的实施例2的被附加了针对输入程序的扩展语言规范信息的输入程序的图。在实施例2中,登记了在扩展语言规范分析步骤(Si)结束的时刻的扩展语言规范信息的结果如图13的表所示,执行了带扩展语言规范信息输入程序输出步骤(S32)的结果如图14所示。按照以上的实施例2所示,根据图14可知,用户能够容易掌握利用现有技术不能掌握的内容,即在由用户指定了扩展语言规范语句的优先度的情况下对输入程序中的各个对象产生了什么样的影响。由此,能够削减验收工时。(实施例3)下面说明实施例3。在实施例3中表示向目标程序输出扩展语言规范信息时的具体示例。另外,除了向目标程序输出扩展语言规范信息之外,其它的前提条件与实施例1相同。在这种情况下,扩展语言规范分析步骤(Si)的执行动作、以及作为扩展语言规范信息输出步骤(S3)的子步骤的带扩展语言规范信息输入程序输出步骤(S32)的执行动作与实施例1相同,所以省略说明。图15是表示本发明的实施例3的被附加扩展语言规范信息之前的目标程序的图。 图16是表示本发明的实施例3的被附加了扩展语言规范信息之后的目标程序的图。在实施例3中,由于向目标程序输出扩展语言规范信息,所以扩展语言规范信息输出步骤(S3)的S33的判定为是,并由编译器执行带扩展语言规范信息目标程序输出步骤 (S34)。具体地讲,首先在S34,编译器生成目标程序,并记录各个对象的定义部位 (S341)。在此,图15表示在S341生成的目标程序示例、即被附加扩展语言规范信息之前的目标程序示例,能够确认各个对象的定义部位。在图15中,假设利用OBJECT虚拟命令来定义各个对象。然后,编译器在S34执行循环C的处理,针对对象χ、γ、z,在各个定义部位将包括受到影响的对象、有效的扩展语言规范语句、采用的优先度和对象变更内容的扩展语言规范信息,作为备注插入到目标程序中(S343)。并且,编译器输出将图16所示的扩展语言规范信息作为备注进行附加后的目标程序(S344)。按照以上的实施例3所示,根据图16可知,用户能够容易掌握利用现有技术不能掌握的内容,S卩通过由用户指定扩展语言规范语句而对目标程序产生了什么样的影响。由此,能够削减验收工时。(实施例4)图17是表示本发明的实施例4的输入程序的图。图18是表示本发明的实施例4的针对输入程序在扩展语言规范信息数据库中登记的扩展语言规范信息的图。在图17中, 输入程序由test2. h禾口 test2. cc构成。在实施例4中,作为前提条件,不按照来自用户的指示(选项等)来输出扩展语言规范信息,但是对对象间的未对齐进行警告。并且,假设不按照来自用户的指示(选项等) 来提示扩展语言规范指定方案,并且也不由用户进行扩展语言规范语句的优先度指定。首先,由编译器开始编译时,执行扩展语言规范分析步骤(Si)。在此,扩展语言规范分析步骤(Si)的处理与在实施例1中说明的处理相同,所以省略说明。图18表示在执行扩展语言规范分析步骤(Si)的时刻被登记在扩展语言规范信息数据库51中的扩展语言规范信息。如图18所示,对象χ根据扩展语言规范语句将对齐(对齐值)变更为2,对象ρ 根据扩展语言规范语句将对齐变更为8。然后,由编译器执行S2的判定。根据上述前提条件,S2的判定为否,然后执行S4 的判定。然后,根据上述前提条件,S4的判定为是,并执行对象间警告输出步骤(SQ。在对象间警告输出步骤(SO中进行循环D的处理,编译器对正在参照对象χ和对象ρ的式子或者语句进行S52的判定。在本实施例中,对图17的输入程序所示的代入语句“ρ = &x”进行判定。如图18所示,对象χ的对齐成为2,对象ρ的对齐成为8。但是,在本实施例的情况下,在语句中所期望的对齐是代入语句的结果的类型的对齐即8。因此,对象χ与所期望的对齐8不同,所以被判定为未对齐,并执行S53。然后,在S17,显示在上述的代入语句的部位被附加了扩展语言规范信息的警告消息,该扩展语言规范信息包括未对齐的对象的有效的扩展语言规范语句、受到影响的对象和对象变更内容。图19是表示本发明的实施例4的针对输入程序附加了未对齐的警告的输入程序的图。根据图19的警告显示可知,在进行编译时能够检测利用现有技术不能检测的由于指定扩展语言规范语句而也许会产生的意外的未对齐,因此能够削减验收工时。(实施例5)图20A和图20B是表示本发明的实施例5的输入程序和编译时的前提条件的图。 图21是表示本发明的实施例5的针对输入程序在扩展语言规范信息数据库51中登记的扩展语言规范信息的图。图20A表示由test3. cc构成的输入程序,图20B表示对于作为实施例5的前提条件的程序执行环境中的传输命令为最佳的对齐。在实施例5中,作为前提条件是事前在编译器中登记对于程序执行环境中的传输命令为最佳的对齐,但是不限于这种形式,也可以是在编译时由用户指定。并且,作为其它前提条件假设是不输出扩展语言规范信息,也不进行对象间的未对齐的警告,但是提示扩展语言规范指定方案。并且,不由用户进行扩展语言规范语句的优先度指定。首先,由编译器开始编译时,执行扩展语言规范分析步骤(Si)。在此,扩展语言规范分析步骤(Si)的处理与在实施例1中说明的处理没有特别变化,所以省略说明。图21 表示在执行扩展语言规范分析步骤(Si)的时刻被登记在扩展语言规范信息数据库51中的扩展语言规范信息。如图21所示,对象χ根据扩展语言规范语句将对齐变更为8。然后,由编译器执行S2的判定。根据上述前提条件,S2和S4的判定结果分别为否,S6的判定结果为是,然后执行优化方案输出步骤(S7)。
在优化方案输出步骤(S7),对全部对象反复执行循环E的处理。首先,在S72,编译器获取针对各个对象的相对于相应程序执行环境中的传输命令的最佳对齐。在本实施例中,相应对象是对象X和y,分别具有类型A (默认的大小8和对齐4)。如图20A和图20B 所示,作为前提条件是在编译器中事前登记了相对于程序执行环境中的传输命令的最佳对齐,所以得知大小为8时的最佳对齐为8。图22是表示本发明的实施例5的输入程序的各个对象、对象大小、最佳对齐以及当前对齐的一览表。图23是表示本发明的实施例5的针对输入程序附加了优化方案的输入程序的图。根据图22可知,对于对象X,按照由用户进行的扩展语言规范指定被指定为最佳对齐,但对于对象y未进行最佳指定(对齐是默认的4)。因此,针对对象y的S73的判定结果为否,编译器输出被附加了所期望的扩展语言规范语句和所期望的对象变更内容的方案消息并进行显示。图23表示作为备注而附加了方案消息的输入程序。根据图23可知,通过由编译器提出在现有技术中编译器不能提出的、用于提高代码生成效率的对齐指定的扩展语言规范语句,能够削减用户的程序调整工时。按照以上所述来执行本发明的编译方法。另外,在本实施例中,作为显示方案消息的方法,记载了对输入程序附加备注的形式,但不限于这种方法。例如,也可以向输入程序附加方案消息并执行监视器显示,还可以输出到文本文件中。即,所期望的扩展语言规范语句、对象变更内容及其对齐只要是用户能够理解的方法,则与其形式无关。并且,上述编译器也可以是将本发明的编译方法中包含的特征性步骤作为处理单元的编译装置。下面,简单说明这种情况。图M是表示将本发明的编译方法中包含的特征性步骤作为处理单元的编译装置的结构的图。在图M中,编译装置1具有编译部10、存储部50和输入受理部60。编译部10具有扩展语言规范分析部11,根据多个扩展语言规范语句的优先度, 对与由于用户附加到输入程序中的多个扩展语言规范语句而受到影响的输入程序的部分相关的信息——即扩展语言规范信息进行分析;输出部12,输出由扩展语言规范分析部11 分析的扩展语言规范信息或者基于该扩展语言规范信息的信息。输出部12具有扩展语言规范信息输出部13,将由扩展语言规范分析部11分析的扩展语言规范信息作为编译结果进行输出,以便显示给用户。输出部12具有对象间警告输出部15,根据由扩展语言规范分析部11分析的扩展语言规范信息,检测对象间的未对齐,并输出表示若进行编译则产生未对齐之意的警告;优化方案输出部17,根据所分析的扩展语言规范信息,输出将进一步提高代码性能的扩展语言规范的指定方法提示给用户的提示。扩展语言规范信息输出部13具有带扩展语言规范信息输入程序输出部132, 将扩展语言规范信息附加在输入程序中进行输出;带扩展语言规范信息目标程序输出部 134,将扩展语言规范信息附加在目标程序中进行输出。存储部50具有扩展语言规范信息存储部52和程序执行环境信息存储部M。
输入受理部60接受来自用户的指定,向程序中附加扩展语言规范语句。并且,在编译装置1中进行了扩展语言规范分析部11的分析之后,扩展语言规范信息输出部13、对象间警告输出部15和优化方案输出部17分别能够独立进行动作,能够根据用户的指示(选项等)分别选择是否进行处理。另外,编译装置1如果能够记录扩展语言规范分析部11的分析结果并进行参照, 则也可以不具有扩展语言规范信息存储部52。在这种情况下,例如可以设置另外准备的扩展语言规范信息数据库51等。S卩,编译装置1将扩展语言规范分析部11的分析结果存储在扩展语言规范信息数据库51中,参照在该扩展语言规范信息数据库51中存储的分析结果即扩展语言规范信息即可。同样,编译装置1如果能够使优化方案输出部17参照程序执行环境信息,则也可以不具有程序执行环境信息存储部M。根据以上所述的本发明,能够实现使用户能够容易掌握所指定的多个扩展语言规范(扩展语言规范语句)对输入程序及目标程序的影响的编译方法和编译程序。由此,能够削减验收工时。另外,考虑扩展语言规范(扩展语言规范语句)间的优先度,不仅能够在进行编译时正确检测由于用户在输入程序中指定扩展语言规范(扩展语言规范语句)而也许会产生的意外的未对齐,而且能够使编译器提出用于提高代码生成效率的对齐指定的扩展语言规范(扩展语言规范语句)。由此,不仅能够削减验收工时,也能够削减用户的程序调整工时。并且,本发明不仅能够实现为装置,也能够实现为设有这种装置具有的处理单元的集成电路。并且,本发明不仅能够实现为编译方法,也能够实现为使计算机执行这些步骤的程序。产业上的可利用性本发明能够用作编译方法和编译程序,尤其能够用作为了在程序执行环境下得到最高的性能而准备了扩展语言规范的编译方法和编译程序。标号说明1编译装置;10编译部;11扩展语言规范分析部;12输出部;13扩展语言规范信息输出部;15对象间警告输出部;17优化方案输出部;50存储部;51扩展语言规范信息数据库;52扩展语言规范信息存储部力4程序执行环境信息存储部;60输入受理部;132带扩展语言规范信息输入程序输出部;134带扩展语言规范信息目标程序输出部。
权利要求
1.一种编译方法,将输入程序变换为目标程序,其特征在于, 该编译方法包括分析步骤,在对所述输入程序指定了多个扩展语言规范的情况下,对所指定的所述多个扩展语言规范进行分析,由此确定由于所述指定的多个扩展语言规范而受到影响的所述输入程序的部分;以及输出步骤,将与所述部分相关的信息和所述目标程序一起输出。
2.根据权利要求1所述的编译方法,其特征在于,所述分析步骤中,根据对多个扩展语言规范赋予的优先度的规定,在多个扩展语言规范的指定之中确定有效的扩展语言规范的指定,并确定由于该有效的扩展语言规范的指定而受到影响的所述输入程序的部分,所述输出步骤中,将该有效的扩展语言规范的指定、由于该有效的扩展语言规范的指定而受到影响的所述输入程序中的对象、所述优先度的规定、以及由于该有效的扩展语言规范而受到影响并被变更的对象的变更内容中的至少一种信息,作为与所述部分相关的信息,和所述目标程序一起输出。
3.根据权利要求2所述的编译方法,其特征在于, 所述输出步骤包括输入程序输出步骤,将与所述部分相关的信息包含在所述输入程序中,与所述目标程序一起输出。
4.根据权利要求2所述的编译方法,其特征在于, 所述输出步骤包括目标程序输出步骤,将与所述部分相关的信息包含在所述目标程序中,与所述目标程序一起输出。
5.根据权利要求2所述的编译方法,其特征在于, 所述输出步骤包括目标程序输出步骤,将该有效的扩展语言规范的指定、由于该有效的扩展语言规范的指定而受到影响的所述输入程序中的对象、所述优先度的规定、由于该有效的扩展语言规范而受到影响并被变更的对象的变更内容、由于所述扩展语言规范的指定而受到影响的编译过程中的汇编命令、以及将所述扩展语言规范的指定设为无效时的编译过程中的汇编命令中的至少一种信息,作为与所述部分相关的信息,包含在所述目标程序中,与所述目标程序一起输出。
6.根据权利要求1所述的编译方法,其特征在于, 所述输出步骤还包括警告输出步骤,根据与所述部分相关的信息,确认所述输入程序中的对象的对齐是否被变更,在已确认的所述对象的被变更的对齐与所期望的对齐不一致的情况下,输出表示所述对象的对齐中发生未对齐之意的警告。
7.根据权利要求1所述的编译方法,其特征在于, 所述输出步骤还包括优化方案输出步骤,根据与所述部分相关的信息,对于包括由于所述扩展语言规范的指定而受到影响的对象的所述输入程序中的全部对象,确认该对象的对齐是否被变更为对于程序执行环境中的传输命令来说最佳的对齐,在所述输入程序中至少一个对象没有变更为最佳对齐的情况下,输出针对所述至少一个对象的最佳对齐的提示。
8.根据权利要求2所述的编译方法,其特征在于,对所述多个扩展语言规范赋予的优先度的规定,是被预先规定的。
9.根据权利要求8所述的编译方法,其特征在于,对所述多个扩展语言规范赋予的优先度的规定,还由用户规定,所述分析步骤将由所述用户规定的该优先度的规定作为对所述多个扩展语言规范赋予的优先度的规定。
10.一种编译程序,将输入程序变换为目标程序,其特征在于,该编译程序使计算机执行以下步骤分析步骤,在对所述输入程序指定了多个扩展语言规范的情况下,对所指定的所述多个扩展语言规范进行分析,由此确定由于所述指定的多个扩展语言规范而受到影响的所述输入程序的部分;以及输出步骤,将与所述部分相关的信息和所述目标程序一起输出。
11.一种编译装置,将输入程序变换为目标程序,其特征在于,该编译装置具有分析部,在对所述输入程序指定了多个扩展语言规范的情况下,对所指定的所述多个扩展语言规范进行分析,由此确定由于所述指定的多个扩展语言规范而受到影响的所述输入程序的部分;以及输出部,将与所述部分相关的信息和所述目标程序一起输出。
全文摘要
一种编译方法,使用户能够容易掌握所指定的多个扩展语言规范对输入程序和目标程序的影响,该编译方法将输入程序变换为目标程序,该编译方法包括分析步骤,在对输入程序指定了多个扩展语言规范的情况下,对所指定的多个扩展语言规范进行分析,由此确定由于所指定的多个扩展语言规范而受到影响的输入程序的部分;和输出步骤,将与该部分相关的信息和目标程序一起输出。
文档编号G06F9/45GK102203733SQ20098014318
公开日2011年9月28日 申请日期2009年10月7日 优先权日2008年10月30日
发明者浅尾忍 申请人:松下电器产业株式会社

最新回复(0)