编译方法、调试方法、编译程序和调试程序技术

技术编号:2836726 阅读:190 留言:0更新日期:2012-04-11 18:40
一种用于将输入程序转换成目标程序的编译方法,包括:部分语言规范判定步骤,用于判定在输入程序中设置的至少两个特定范围的每个特定范围中的语言规范;判断步骤,用于判断所述特定范围中的语言规范之间是否存在差别;和部分代码校正步骤,用于在判断出所述特定范围中的语言规范之间存在差别时,对特定范围之一中的至少一部分代码进行校正。

【技术实现步骤摘要】

本专利技术涉及用于将用高级语言描述的程序转换成目标程序的编译方法、调试方法、编译程序和调试程序
技术介绍
在近年来的软件开发中,程序规模不断增大,基于这种情况,具有高可维护性和高可重用性的面向目标语言受到了关注。面向目标语言的典型例子是C++语言。作为替代一直以来传统地广泛用于编程的C语言的语言,C++语言正在成为关注的焦点,并且在相关
,编程中的语言从C语言转变到C++语言。在这种语言转变中,因为C++语言是C语言的高级兼容语言,故在常规情况下只要简单地通过将C语言编译器替换为C++语言编译器,就能生成没有任何操作问题的目标代码。然而,当用C语言中叙述的程序在C++语言中编译时,会引起代码大小和执行时间不受欢迎地增长的问题。针对该问题的常规第一解决方案是,使用文献(见M·A·Ellis、B·Stroustrup著,Takanori Adachi和Hiroshi Koyama译的“注释C++参考手册”7.4章“连接指配”)中所叙述的关于程序的连接指配(linkageassignment)。第二解决方案是分析程序中语言规范的范围并且尽可能地对编译自动应用子集的语言规范,如同在日本专利申请公开No.2003-50700中所叙述的。然而,在第一解决方案中,迫使程序员在编程中考虑连接指配,这阻碍了C语言轻易地向C++语言转变。在第二解决方案中,没有考虑到与程序中编码符号(函数名、变量名等)相关的一致性,虽然可以将C++语言编译成用作内建为C++子集规范的EC++语言。结果是,无法期望这样的优化,例如基于语言规范的兼并对代码大小和执行时间的缩减。专利技术内容因此,本专利技术的主要目的在于提供一种编译方法,其中程序员可以轻易地将程序转变为向上兼容的程序,而不必注意任何连接指配,并且作为程序规范的最大兼并的结果,可以实现代码大小和执行时间的缩减,而且本专利技术的目的还在于提供能够轻易地进行微调的调试方法。为了解决以上问题,根据本专利技术的编译方法是一种用于将输入程序转换成目标程序的编译方法,包括部分语言规范判定步骤,用于判定在输入程序中设置的至少两个特定范围中的语言规范;判断步骤,用于判断所述特定范围中的语言规范之间是否存在差别;和部分代码校正步骤,用于在判断出所述特定范围中的语言规范之间存在差别时,对特定范围之一中的至少一部分代码进行校正。根据上述方法,由于代码被校正从而使得它们可以彼此组合在一起,包括部分不同语言规范的程序可以被组合起来并且以最优的语言规范编译,因此可以更有效地生成代码。优选地,在所述部分语言规范判定步骤中,基于在特定范围中使用的编程语言的工具性程序判定所述语言规范。根据上述方法,由于程序员可以将包括部分不同语言规范的程序组合在一起而不校正源程序,并且可以以最优的语言规范编译该程序,因此可以更有效地生成代码。作为上述方法的更加优选的模式,在所述部分语言规范判定步骤中,在所述输入程序中存在语言规范控制语句的情况下,基于所述语言规范控制语句判定所述语言规范。根据上述方法,例如,程序员可以根据源程序中的#pragma指令来描述所述语言规范控制语句,并且因此可以自由地选择语言规范而不受来自源程序中初始描述的工具性程序的任何影响。更加优选地,在所述语言规范判定步骤中,在向用于编译所述输入程序的编译系统提供了语言规范控制指令的情况下,基于所述语言规范控制指令判定所述语言规范。根据上述方法,例如,程序员基于编译系统的选项提供语言规范控制指令,并且由此可以自由地选择语言规范而不校正源程序,并且不受来自源程序中初始描述的工具性程序的影响。更加优选地,在所述部分代码校正步骤中,在所有函数中的定义语言规范与引用语言规范之间存在差别的情况下,具有子集语言规范的函数代码名被改变为具有超集语言规范的函数代码名。根据上述方法,即使在定义的语言规范和引用的语言规范之间存在任何差别,也可以将程序组合起来。作为上述方法的更加优选的模式,在所述部分代码校正步骤中,所有被多重定义的外部函数都被改变为具有单独函数名并且在程序中未被多重定义的外部函数,并且当所有被多重定义的外部函数都被改变为具有所述单独函数名并且在程序中未被多重定义的所述外部函数时,再次执行部分语言规范判定步骤。根据上述方法,使用多重定义函数的C++程序可以作为C程序进行编译,这提高了代码生成的效率。作为上述方法的更加优选的模式,在所述部分代码校正步骤中,所有属于一名字空间的外部函数都被改变为具有单独函数名并且在程序中不属于所述名字空间的外部函数,并且当所有属于所述名字空间的外部函数都被改变为具有所述单独函数名并且不属于在程序中所述名字空间的所述外部函数时,再次执行部分语言规范判定步骤。根据上述方法,使用所述名字空间的C++程序可以作为C程序编译,这提高了代码生成的效率。作为上述方法的更加优选的模式,在所述部分代码校正步骤中,所有由一模板生成的外部函数都被改变为具有单独函数名并且在程序中不是由该模板生成的外部函数,并且当所有由该模板生成的外部函数都被改变为具有该单独函数名并且在程序中不是由该模板生成的外部函数时,再次执行部分语言规范判定步骤。根据上述方法,使用所述名字空间的C++程序可以作为C程序编译,这提高了代码生成的效率。根据本专利技术的调试方法是一种用于调试输入程序的调试方法,包括部分语言规范认可步骤,用于认可在输入程序中设置的至少两个特定范围的每个特定范围中的语言规范;和部分语言规范显示步骤,用于一起显示每个特定范围中所认可的语言规范及其程序来源。根据上述方法,程序员可以轻易地确认程序的哪个部分以何种语言规范被编译。结果是,可以有效地进行调试和微调操作。作为上述方法的优选模式,该方法进一步包括模板开发显示步骤,其用于在待分析的目标是由所述模板生成的实例的情况下,显示其中模板被开发的源程序。根据上述方法,在开发模板之后,程序员可以轻易地掌握源程序,并且可以有效地进行调试和微调操作。作为上述方法的更加优选的模式,该方法进一步包括子集语言规范违背部分显示步骤,其用于在子集的语言规范被定义在所认可的语言规范中的情况下,显式地显示偏离子集的语言规范的一部分程序的内容。根据上述方法,程序员可以轻易地掌握偏离子集的部分程序,并且可以更有效地进行调试和微调操作。本专利技术不仅可以实现包括这些特征步骤的编译方法和调试方法,而且可以实现使计算机执行包含在所述编译方法和所述调试方法中的这些特征步骤的编译程序和调试程序,以及执行包含在所述编译方法和所述调试方法中的这些特征步骤的编译装置和调试器装置。进一步,显而易见地,可以通过例如CD-ROM(光盘只读存储器)的记录介质和例如互联网的传输介质来分布所述编译器和调试器。根据本专利技术的编译程序是一种用于将输入程序转换成目标程序的编译程序,该编译程序使计算机执行部分语言规范判定工具性程序,用于判定在输入程序中设置的至少两个特定范围的每个特定范围中的语言规范;用于判断所述特定范围之间的语言规范中是否存在差别的工具性程序;和部分代码校正工具性程序,用于在判断出所述特定范围之间的语言规范中存在差别的情况下,对特定范围之一中的至少一部分代码进行校正。作为上述程序的优选模式,所述部分语言规范判定工具性程序,基于所述特定范围中所使用的编程语言的工具性程序来本文档来自技高网...

【技术保护点】
一种用于将输入程序转换成目标程序的编译方法,包括:    部分语言规范判定步骤,用于判定在输入程序中设置的至少两个特定范围的每个特定范围中的语言规范;    判断步骤,用于判断所述特定范围中的语言规范之间是否存在差别;和    部分代码校正步骤,用于在判断出所述特定范围中的语言规范之间存在差别时,对特定范围之一中的至少一部分代码进行校正。

【技术特征摘要】
JP 2006-5-11 2006-1323801.一种用于将输入程序转换成目标程序的编译方法,包括部分语言规范判定步骤,用于判定在输入程序中设置的至少两个特定范围的每个特定范围中的语言规范;判断步骤,用于判断所述特定范围中的语言规范之间是否存在差别;和部分代码校正步骤,用于在判断出所述特定范围中的语言规范之间存在差别时,对特定范围之一中的至少一部分代码进行校正。2.根据权利要求1所述的编译方法,其中在所述部分语言规范判定步骤中,基于在特定范围中使用的编程语言的工具性程序判定所述语言规范。3.根据权利要求1所述的编译方法,其中在所述部分语言规范判定步骤中,在所述输入程序中存在语言规范控制语句的情况下,基于所述语言规范控制语句判定所述语言规范。4.根据权利要求1所述的编译方法,其中在所述部分语言规范判定步骤中,在语言规范控制指令被提供给用于编译所述输入程序的编译系统的情况下,基于所述语言规范控制指令判定所述语言规范。5.根据权利要求1所述的编译方法,其中在所述部分代码校正步骤中,在所有函数中的定义语言规范与引用语言规范之间存在差别的情况下,具有子集语言规范的函数代码名被改变为具有超集语言规范的函数代码名。6.根据权利要求1所述的编译方法,其中在所述部分代码校正步骤中,所有被多重定义的外部函数都被改变为具有单独函数名并且在程序中未被多重定义的外部函数,并且当所有被多重定义的外部函数都被改变为具有该单独函数名并且在程序中未被多重定义的该外部函数时,再次执行部分语言规范判定步骤。7.根据权利要求1所述的编译方法,其中在所述部分代码校正步骤中,所有属于一名字空间的外部函数都被改变为具有单独函数名并且在程序中不属于所述名字空间的外部函数,并且当所有属于所述名字空间的外部函数都被改变为具有所述单独函数名并且在程序中不属于所述名字空间的所述外部函数时,再次执行部分语言规范判定步骤。8.根据权利要求1所述的编译方法,其中在所述部分代码校正步骤中,所有由一模板生成的外部函数都被改变为具有单独函数名并且在程序中不是由该模板生成的外部函数,并且当所有由该模板生成的外部函数都被改变为具有所述单独函数名并且在程序中不是由该模板生成的所述外部函数时,再次执行部分语言规范判定步骤。9.一种用于调试输入程序的调试方法,包括部分语言规范认可步骤,用于认可在输入程序中设置的至少两个特定范围的每个特定范围中的语言规范;和部分语言规范显示步骤,用于一起显示每个特定范围中所认可的语言规范及其程序来源。10.根据权利要求9所述的调试方法,进一步包括模板开发显示步骤,用于在分析目标是由所述模板生成的实例的情况下,显示其中模板被开发的源程序。11.根据权利要求9所述的调试方法,进一步包括用于显示违背子集语言规范的部分的步骤,其中在子集语言规范被定义在所认可的语言规范中的情况下,偏离子集语言规范的一部分程序的内容被显式地显示。12.一种用于将输...

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

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

1