自动修正错误的粘贴方法及其设备的制作方法

文档序号:6463741阅读:121来源:国知局
专利名称:自动修正错误的粘贴方法及其设备的制作方法
技术领域
本发明涉及对源代码的处理,具体涉及一种能自动修正错误的粘贴 方法和设备,能够减少开发的程序中的错误。
背景技术
通常,程序开发工具都具备源代码粘贴功能,方便用户将之前编写 的源代码或者另外的文件中的源代码拷贝到目的位置并且对粘贴的源代 码进行相关的处理,以便提高程序开发效率。
例如,在用于Java的Eclipse中,如果被复制的代码中包含有类, 并且在粘贴的Java文件中没有相关的头文件声明的话,则会在粘贴的 Java文件中自动追加相应的头文件。但是,该功能仅仅在Eclipse工具中 有用,如果用户从另外的文本编辑工具所打幵的源代码文件中复制部分 内容到目标位置,则无法追加相应的头文件。
另外,在专利文献l (CN1618057A)中披露了一种粘贴方法,它在 用户复制一部分素材时,将该部分素材和与该部分素材相关的上下文都 放置在剪贴板中。当用户将该部分素材插入到目标位置时,通过比较放 置在剪贴版中的上下文和目标位置周围的上下文来确定该部分素材在插 入到目标位置之后是否会导致语法错误。如果有语法错误,则以突出显 示的形式向用户告知,并且基于剪贴版中的上下文更正该错误。
专利文献1所提出的方法由于仅仅是比较上下文来进行判断,尤其 是对while循环或者if/then/else之类构成了一个完整语段的代码复制中 出现的错误有效,因此对于复制文件和插入点上下文中存在相同变量名 的代码而导致的问题,则无能为力。
例如,在剪贴板的内容和粘贴目的地都存在相同名称的变量声明或 者在剪贴板的变量不存在相应的声明且粘贴目的地也没有该变量的声 明,则会产生编译错误或者bug,导致程序开发效率大大降低。另外,在专利文献l所提出的方法中,由于复制的时候必须同时复 制上下文信息到剪贴板指定地方,如果错误的类型是剪贴板中的信息过 多了,就无法进行自动修正了。专利文献l所提出的方法也仅仅适用于 语法错误,如果该错误原因并非因语法问题而导致的话它也无法自动修 正。另外,专利文献l所提出的方法限制了复制的方法,对于一般工具 中复制出来的内容进行粘贴的话,则无法解决专利文献1所要解决的问 题。

发明内容
本发明的目的是提出一种能自动修正错误的粘贴方法和设备,它基 于粘贴内容及目标位置周围的代码的解析结果来判断粘贴过程中是否会 出现错误并且对错误进行处理,从而能够减少开发的程序中的错误。
在本发明的一个方面,提出了一种能自动修正错误的粘贴方法,包 括步骤将剪贴板中文本格式的源代码插入到文件的指定位置;对源代 码和该文件中指定位置周围的代码进行解析,以获得相应的代码信息; 基于该代码信息分析上述插入操作是否会产生错误,并获得产生的错误 的类型;以及根据所获得类型,修正该错误。
根据本发明的实施例,所述代码信息与所述源代码一起放置在剪贴 板中。
根据本发明的实施例,所述修正错误的步骤包括对变量或者函数信 息的自动修改。
根据本发明的实施例,所述自动修改包括以下至少之一对相同名 称的变量进行改名使其名称不同,自动合并相同含义的变量的多个声明, 自动添加变量的声明。
根据本发明的实施例,所述修正错误的步骤包括自动匹配括号。 根据本发明的实施例,所述文件是以下的语言之一写成的C/C++,
JAVA, C#。
根据本发明的实施例,所述的粘贴方法还包括步骤突出显示修正 了错误的内容。
根据本发明的实施例,所述的粘贴方法还包括步骤响应于用户的操作而撤销错误修正。
在本发明的另一方面,提出一种能够自动修正错误的粘贴设备,响 应于用户的操作将剪贴板中文本格式的源代码插入到文件的指定位置, 该粘贴设备包括代码解析装置,对源代码和该文件中指定位置周围的 代码进行解析,以获得相应的代码信息;错误检出装置,基于该代码信
息分析上述插入操作是否会产生错误,并获得产生的错误的类型;以及
错误修正装置,根据所获得类型,修正该错误。
根据本发明的实施例,所述的粘贴设备还包括代码显示装置,突 出显示修正了错误的内容。
根据本发明的实施例,所述错误修正装置对变量或者函数信息进行 自动修改。
根据本发明的实施例,所述错误修正装置自动进行匹配括号。 在本发明的又一方面,提出了一种记录了计算机程序的计算机可读 产品,所述计算机程序在被执行时,使得计算机执行如下步骤将剪贴
板中文本格式的源代码插入到文件的指定位置;对源代码和该文件中指 定位置周围的代码进行解析,以获得相应的代码信息;基于该代码信息 分析上述插入操作是否会产生错误,并获得产生的错误的类型;以及根 据所获得类型,修正该错误。
利用上述方法和设备,由于基于对代码的解析结果来判断粘贴中是 否有错误并且对错误进行相应的处理,大大提高了程序开发效率,并提 高了程序的质量。


从下面结合附图的详细描述中,本发明的上述特征和优点将更加明 显,其中
图1示出了根据本发明实施例的方法的运行环境的示意图; 图2示出了根据本发明实施例的能进行自动错误修正的粘贴设备的 示意性结构框图3是根据本发明实施例的能进行自动错误修正的粘贴方法的处理 流程图;图4是描述同名变量的修正过程的流程图5是描述变量重复定义的修正过程的流程图6是描述自动追加变量声明的修正过程的流程图7是描述括号不匹配的修正过程的流程图;以及
图8示出了错误修正过程的用户界面例。
具体实施例方式
下面,参考附图详细说明本发明的优选实施方式。为了清楚和简明, 包含在这里的己知的功能和结构的详细描述将被省略,以防止它们使本 发明的主题不清楚。
图1示出了根据本发明实施例的方法的运行环境的示意图。如图1 所示,集成开发环境(IDE) 100包括代码编辑器110,编译器120,控 制部130和调试器140。
代码编辑器110提供对源代码文件210中的源代码的编辑功能,例 如追加、删除、复制、粘贴等功能,并且将编辑后的源代码文件210存 储在存储器(未示出)中。编译器120根据编译选项把工程文件(源代 码文件)编译成二进制可执行文件220,存储在存储器中。
调试器140从存储器读取二进制可执行文件220,并且执行该二进 制可执行文件,以获得调试信息,把调试信息提供给控制部130,并执 行控制部130传送过来的调试命令,对二进制可执行文件220进行调试。 控制部130负责编译器120的编译选项的设置和表示,以及编译结果的 输出。另外,控制器130还负责调试器140的调试选项的设置和表示、 调试信息的表示以及对调试器的控制等等。
图2示出了根据本发明实施例的能进行自动错误修正的粘贴设备的 示意性结构框图。如图2所示,代码编辑器110包括代码显示部111, 错误检出部112和错误修正部113。
代码显示部111显示要被插入复制代码的文件B。在发生粘贴操作 时,用户对文件A (可与文件B是同一文件)中的部分代码进行复制, 复制的代码放置(存储)在剪贴板(缓冲区)300中。然后,用户指定 该复制的代码要插入文件B中的位置。错误检出部112从剪贴板300中读取该复制的代码和编辑中的文件 B的代码,并将其传送给编译器120中设置的代码解析部,代码解析部 对剪贴板中的代码和编辑中的代码内容进行代码解析,获得解析后的代 码信息和可能的错误信息,并且将这些信息发送给错误检出部112。错 误检出部112对代码信息和可能的错误信息进行综合分析,确定错误类 型(例如,变量名未声明,出现相同变量名等等)和与该错误相关的信 息(例如,变量名的名称、位置等信息)发送给错误修正部113。
然后,错误修正部113根据错误的类型进行自动修正,并且把修改 后的源代码信息和修改标注发送给代码显示部111。代码显示部把自动 修正的代码突出显示出来,并且把粘贴操作的结果显示给用户。
下面对照流程图详细说明上述各个部分的具体操作过程。图3是根 据本发明实施例的能进行自动错误修正的粘贴方法的处理流程图。
参考图3,用户利用代码编辑器110打开文件Test (文件B ,以 C/C++, JAVA, C弁之一写成),如图8中的上部界面所示。然后用户在 文件Test中确定插入点(SIO),并且将剪贴板300中存储的文本类型的 复制代码(来源于文件B或者其他文件A)粘贴到指定的插入点(Sll)。
接下来,如图8的中间界面所示,错误检出部112从剪贴板300中 读取该复制的代码和编辑中的文件B的代码,并将其传送给编译器120 中设置的代码解析部。代码解析部对剪贴板中的代码和编辑中的代码内 容进行代码解析,获得解析后的代码信息和可能的错误信息,并且将这 些信息发送给错误检出部112。错误检出部112对代码信息和可能的错 误信息进行综合分析,确定是否存在确实存在错误(S12)。
如果没有错误(S12:否),则将文本代码直接粘贴到插入点(S13)。 如果有错误(S13:是),错误检出部112将错误类型(例如,变量名未 声明,出现相同变量名等等)和与该错误相关的信息(例如,变量名的 名称、位置等信息)发送给错误修正部113。然后,错误修正部113根 据错误的类型对错误进行修正(S14),并且将修改后的源代码信息和修 改标注发送给代码显示部111。
接下来,代码显示部111把自动修正的代码突出显示出来,并且把 粘贴操作的结果显示给用户(S15)。如果用户判断该修改实际上并不合适,或者粘贴操作本身并不合适,则通过撤销操作来逐步取消之前的操
作(S16)。如图8下部界面所示。根据自动追加变量声明的修正方法, 粘贴内容中的value和valuePlus的声明被自动追加。粘贴后的结果在图 8的下方,被自动修改的代码突出显示(加粗,斜体等)。
下面以具体的错误类型为示例来描述根据本发明实施例的粘贴方法。
同名变量的粘贴
剪贴板中存在和粘贴地同名的变量,如果这两个或更多个同名变量 代表的含义不同的话,直接粘贴虽然不会导致编译错误,但是会导致程 序缺陷。
图4是描述同名变量的修正过程的流程图。如图4所示,错误检出 部112基于代码解析部所解析得到的代码信息和可能的错误信息,判断 对于剪贴板的代码和插入点周围的代码,判断是否存在同名变量(S20)。
如果存在同名变量(S20:是),则判断这2个或更多个变量代表的 含义是否相同(比如,两个变量的类型不同则判断为含义不同,或者询 问用户)(S21)。
含义不同的情况下(S21:否),把需要粘贴内容中的同名变量进行 自动改名(S23)。
在不存在同名变量(S20:否)和/或相同名称的变量的含义(S21: 是)相同的情况下,无需进行自动更正,直接将剪贴板的代码传送给代 码显示部lll,显示给用户(S22)。
也就是,判断这两个或者多个变量代表的含义是否相同,在含义不 同的情况下,错误修正部113自动把剪贴板300中的相应变量根据用户 输入的新变量名进行自动改名。比如
① 剪贴板中的内容
1 for (i =0; i < LOOP—COUNT; i++){
2 Action(i); 3}
② 把剪贴板的内容粘贴到下面程序的第3行1 int DoValue(){
2 inti = 0,j;
3
4 i += AnotherAction();
5 return i; 6}
③粘贴后的内容(如果用户输入的新变量名是j的话)
1 intDoCoimtCK
2 inti = 0,j;
3 for (j =0; j < LOOP—COUNT; j++){
4 Action(j);
5 }
6 i += AnotherAction();
7 return i;
变量重复定义的粘贴
剪贴板在与粘贴地存在相同的局部变量声明,直接粘贴的话会产生 编译错误(当然这种情况也属于上述的同名变量的自动修正范围,需要 确认为是相同变量)。
图5是描述变量重复定义的修正过程的流程图。如图5所示,错误 检出部112基于代码解析部所解析得到的代码信息和可能的错误信息, 判断对于剪贴板的代码和插入点周围的代码,判断是否存在同名变量 (S30)。
如果存在同名变量(S30:是),则判断这2个或更多个变量代表的 含义是否相同(比如,两个变量的类型不同则判断为含义不同,或者询 问用户)(S31)。
含义不同的情况下(S31:否),把需要粘贴内容中的同名变量进行 自动改名(S32)。
在用户确认同名变量的含义是相同的基础上,错误检出部112判断粘贴内容和插入点内容中是否存在该同名变量的相同声明(S33)。
如果有相同声明的话(S33:是),错误修正部113自动合并粘贴后
的变量声明,并通过代码显示部向用户显示粘贴结果(S35)。
在相同名称的变量的含义相同的情况下(S33:否),无需进行自动
更正,直接将剪贴板的代码传送给代码显示部lll,显示给用户(S34)。 例如,在有相同声明的情况下,错误更正部113自动删除剪贴板中
存在的声明,比如
① 剪贴板中的代码内容
1 intvaluej
2 value = GetValue();
3 if(value> 100){
4 Action(value);
5 J
② 粘贴到下列代码的第3行
1 intDoValue(){
2 int value;
4 return value; 5}
③ 粘贴后的代码内容
1 intDoValue(){
2 int value;
3 value = GetValue();
4 if(value> 100){
5 Action(value);
6 }
7 return value;变量声明的自动追加的粘贴对于剪贴板中的变量,如果剪贴板和粘贴地都不存在相应的声明的 话,直接粘贴会导致编译错误。
图6是描述自动追加变量声明的修正过程的流程图。如图6所示, 错误检出部112判断是否存在粘贴内容中存在没有声明且插入点处也不 存在声明的变量(S40)。
如果有的话(S40:是),错误检出部113获得该变量的类型(S42), 比如如果作为函数的返回值使用的话,类型可以是函数的返回值类型; 如果该变量和其他变量进行运算(如=),则运算式中的其他变量的类型 作为该变量的类型;向用户询问变量的类型;如果剪贴板中存在解析后 的代码信息,则从解析后的代码信息中获取变量类型。然后错误更正部 113根据获得的变量类型追加该变量的声明(S43)。
如果没有的话(S40:否),则没有必要进行自动修正,直接将剪贴 板的代码传送给代码显示部lll,将粘贴结果显示给用户(S41)。
关于获得变量的声明的方法,例如,如果剪贴板中存在解析后的代 码信息,则从解析后的代码信息中获取变量的声明。如果剪贴板中只有 文本信息的话,则综合分析剪贴板和粘贴地对该变量的使用情况来获得 该变量最恰当的声明。例如如果该变量被用作返回值的话,函数的返 回值类型可以用来声明该变量;如果该变量与其他有声明的变量进行运 算操作的话,则式子中其他变量的类型可以用来声明该变量;最差可以 询问用户来获得变量的类型。例如
① 剪贴板中的代码信息
1 value = GetValue();
2 valuePlus = init;
② 如果往下列第三行中粘贴
1 intDoValue(){
2 intinit=5;
3 return value + valuePlus; 4}
③ 粘贴后的代码内容 1 intDoValue(){2 int init = 5;
3 int value j
4 int valuePlus;
5 value = GetValue();
6 valuePlus = init;
7 return value + valuePlus;
括号不匹配情况的自动修正的粘贴
由于粘贴后产生括号不匹配的话,则相应的添加或删除相应括号来 匹配。
图7是描述括号不匹配的修正过程的流程图。如图7所示,错误检 出部112判断粘贴操作是否会导致括号不匹配(S50)。如果不匹配(S50: 是),则错误更正部113添加或删除适当的括号使其匹配(S51)。否则 (S50:否),则没有必要进行自动修正,直接将剪贴板的代码传送给代 码显示部lll,将粘贴结果显示给用户(S51)。 下面给出了删除多余括号的例子
① 剪贴板的内容 1 GetValue()
② 用户选择下列代码的时候不小心把getAnotherValue()选择成 getAnotherValue(,这时候执行粘贴操作的话
1 intDoValue(){
2 return getAnotherValue();
3 J
③ 粘贴后的内容,自动删除一个多余的)符号
1 intDoValue(){
2 return GetValue(); 3}
下面给出了添加括号的例子-①剪贴板中的内容1 if (IsValueValid()){
2 value = GetNewValue();
② 往下列第三行中粘贴
1 intDoValue(){
2 int value = 0;
4 return value; 5}
③ 粘贴后的内容
1 intDoValue(){
2 int value = 0;
3 if(IsValueValid()){
4 value = GetNewValue();
5 }
6 return value; 7}
如上所述,利用上述实施例的自动修正错误的粘贴方法和设备,由 于能够避免因粘贴而把代表不同意思的变量当作一个变量来使用所导致 的问题,提高了程序的品质。
另外,由于在粘贴过程中能够自动合并相同的变量声明,自动添加 变量的声明,对代表不同含义的变量进行自动改名,自动包含头文件信 息(C/C++),以及自动匹配括号等修正操作,大大提高了程序开发的效 率。
变型
以上描述的是在粘贴板中没有解析信息的情况。在这种情况下,通 过代码解析部对代码进行解析来获得解析的代码信息,从而判断是否存 在错误。但是,如果在复制的同时,对该代码进行解析,将解析得到的 代码信息与复制的代码同时放置在剪贴板中,则错误检出部112可直接进行错误的判断,进而由错误修正部修正所检出的错误。在这种情况下, 代码信息可以包括变量、函数的类型以及所需的头文件(C、 C++)等。
以上所虽然以功能模块的形式描述了粘贴设备的构成及其功能,但 是这并不意味着将本发明限定于上述的形式。本领域的普通技术人员能 够将其中的一个或者多个模块进行组合,或者将其中的一个模块的功能 分别在两个或者更多个模块中实现。
另外,上述的粘贴设备中的功能模块可以由软件来实现,也可以由 硬件来实现,或者由软件和硬件一起来实现。
另外,虽然作为本发明实施例之一的粘贴设备可以作为软件或者硬 件来实现。但是在作为软件来实现的情况下,相应的程序可被存储在记
录介质上,例如光存储器件或者磁存储器器件等,通过CPU执行该程序
来实现本发明。
上面的描述仅用于实现本发明的实施方式,本领域的技术人员应该 理解,在不脱离本发明的范围的任何修改或局部替换,均应该属于本发 明的权利要求来限定的范围,因此,本发明的保护范围应该以权利要求 书的保护范围为准。
权利要求
1、一种能自动修正错误的粘贴方法,包括步骤将剪贴板中文本格式的源代码插入到文件的指定位置;对源代码和该文件中指定位置周围的代码进行解析,以获得相应的代码信息;基于该代码信息分析上述插入操作是否会产生错误,并获得产生的错误的类型;以及根据所获得类型,修正该错误。
2、 如权利要求1所述的粘贴方法,其中所述代码信息与所述源代码 一起放置在剪贴板中。
3、 如权利要求1或2所述的粘贴方法,其中所述修正错误的步骤包 括对变量或者函数信息的自动修改。
4、 如权利要求3所述的粘贴方法,其中所述自动修改包括以下至少之一对相同名称的变量进行改名使其名称不同,自动合并相同含义的变 量的多个声明,自动添加变量的声明。
5、 如权利要求1或2所述的粘贴方法,其中所述修正错误的步骤包 括自动匹配括号。
6、 如权利要求1或2所述的粘贴方法,其中所述文件是以下的语言 之一写成的C/C++, JAVA, C#。
7、 如权利要求1所述的粘贴方法,还包括步骤突出显示修正了错误的内容。
8、 如权利要求1所述的粘贴方法,还包括步骤响应于用户的操作 而撤销错误修正。
9、 一种能够自动修正错误的粘贴设备,响应于用户的操作将剪贴板 中文本格式的源代码插入到文件的指定位置,该粘贴设备包括代码解析装置,对源代码和该文件中指定位置周围的代码进行解析, 以获得相应的代码信息;错误检出装置,基于该代码信息分析上述插入操作是否会产生错误,并获得产生的错误的类型;以及错误修正装置,根据所获得类型,修正该错误。
10、 如权利要求9所述的粘贴设备,其中所述代码信息与所述源代 码一起放置在剪贴板中。
11、 如权利要求9或IO所述的粘贴设备,还包括 代码显示装置,突出显示修正了错误的内容。
12、 如权利要求9或IO所述的粘贴设备,其中所述错误修正装置对 变量或者函数信息进行自动修改。
13、 如权利要求12所述的粘贴设备,其中所述自动修改包括以下至 少之一对相同名称的变量进行改名使其名称不同,自动合并相同含义的变 量的多个声明,自动添加变量的声明。
14、 如权利要求9或10所述的粘贴设备,其中所述错误修正装置自 动进行匹配括号。
15、 如权利要求9或10所述的粘贴设备,其中,响应于用户的操作 而撤销错误修正。
全文摘要
公开了一种能自动修正错误的粘贴方法及其设备,用于提高程序品质和开发效率。该方法包括步骤将剪贴板中文本格式的源代码插入到文件的指定位置;对源代码和该文件中指定位置周围的代码进行解析,以获得相应的代码信息;基于该代码信息分析上述插入操作是否会产生错误,并获得产生的错误的类型;以及根据所获得类型,修正该错误。由于能够避免因粘贴而把代表不同意思的变量当作一个变量来使用所导致的问题,提高了程序的品质,还能自动纠正其他一些编译错误,提高了开发效率。
文档编号G06F11/36GK101599041SQ200810110010
公开日2009年12月9日 申请日期2008年6月2日 优先权日2008年6月2日
发明者黄泉杰 申请人:松下电器产业株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1