一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种编程语句转换方法、电子设备、存储介质与流程

2022-08-13 14:09:57 来源:中国专利 TAG:


1.本发明涉及代码处理技术领域,尤其是涉及一种编程语句转换方法、电子设备、存储介质。


背景技术:

2.相关技术中,goto跳转语句广泛存在于多种编程语言的编程语句体系,例如:过程结构化查询语言(procedural structured query language,pl/sql)、c语言、c 、golang等编程语言。goto跳转语句之所以应用如此广泛,是因为goto跳转语句具备跳转自由的特性,能够在语法结构内任意跳动,类似于汇编语言中的jump语句。然而,goto跳转语句跳转自由的特性也给代码编译器的优化和执行带来了危害,goto跳转语句的应用场景下,很容易打断中央处理器(central processing unit,cpu)的预取指令流,从而降低代码的运行效率。


技术实现要素:

3.本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种编程语句转换方法、电子设备、存储介质,能够对代码中的goto跳转语句进行转换,以提升程序的编译效率。
4.根据本发明的第一方面实施例的编程语句转换方法,所述方法包括;
5.根据原始代码构建目标语法树,所述目标语法树反映所述原始代码的语句结构;
6.获取所述目标语法树中goto跳转语句所处位置的第一位置信息;
7.根据所述第一位置信息,确定与所述goto跳转语句对应的目的跳转标签;
8.获取所述目标语法树中标签定义语句所处位置的第二位置信息,所述标签定义语句用于定义所述目的跳转标签;
9.根据所述第一位置信息与所述第二位置信息,从所述goto跳转语句的各级祖先节点位置中获取与所述标签定义语句同级别的起点位置信息;
10.以第一位置信息作为终点位置信息,并根据所述起点位置信息与所述终点位置信息,从所述原始代码中划分得到待转换代码;
11.将所述goto跳转语句替换为目的跳转语句,并根据所述目的跳转语句与所述待转换代码得到转换后的结果代码。
12.可选的,根据本发明的一些实施例,所述根据所述第一位置信息与所述第二位置信息,从所述goto跳转语句的各级祖先节点位置中获取与所述标签定义语句同级别的起点位置信息,包括:
13.根据所述第一位置信息,获取所述goto跳转语句在所述目标语法树中的第一类节点位置;
14.根据所述第一类节点位置,确定所述goto跳转语句的所述各级祖先节点位置;
15.根据所述第二位置信息,获取所述标签定义语句在所述目标语法树中的第二类节
点位置;
16.根据所述各级祖先节点位置与所述第二类节点位置,获取与所述标签定义语句同级别的所述起点位置信息。
17.可选的,根据本发明的一些实施例,所述根据所述各级祖先节点位置与所述第二类节点位置,获取与所述标签定义语句同级别的起点位置信息,还包括:
18.当所述原始代码中包括两个以上所述goto跳转语句,确定各个所述goto跳转语句的所述各级祖先节点位置在所述目标语法树中的层级位置排布;
19.基于所述层级位置排布,获取各个所述goto跳转语句在所述目标语法树中的共同祖先节点位置,并获取所述共同祖先节点位置中与所述标签定义语句同级别的所述起点位置信息。
20.可选的,根据本发明的一些实施例,所述起点位置信息包括跳转始节点位置,所述终点位置信息包括两个以上跳转终节点位置,所述以第一位置信息作为终点位置信息,并根据所述起点位置信息与所述终点位置信息,从所述原始代码中划分得到待转换代码,包括:
21.将与所述标签定义语句同级别的所述共同祖先节点位置确定为所述跳转始节点位置;
22.将所述第一位置信息中的各个所述第一类节点位置确定为所述跳转终节点位置;
23.基于所述跳转始节点位置和所述跳转终节点位置,从所述原始代码中划分得到所述待转换代码。
24.可选的,根据本发明的一些实施例,所述以第一位置信息作为终点位置信息,并根据所述起点位置信息与所述终点位置信息,从所述原始代码中划分得到待转换代码,还包括:
25.获取所述原始代码与所述目标语法树之间的构建转换关系;
26.根据所述起点位置信息与所述构建转换关系,得到所述起点位置信息在所述原始代码中对应的转换起始行;
27.根据所述终点位置信息与所述构建转换关系,得到所述终点位置信息在所述原始代码中对应的转换终止行;
28.根据所述转换起始行与所述转换终止行,划分得到所述待转换代码。
29.可选的,根据本发明的一些实施例,所述将所述goto跳转语句替换为目的跳转语句,并根据所述目的跳转语句与所述待转换代码得到转换后的结果代码,包括:
30.将所述待转换代码纳入所述目的跳转语句的执行部分,所述转换起始行对应于所述执行部分的起始代码、所述转换终止行对应于所述执行部分的跳转代码;
31.将所述目的跳转标签的标签执行语句设定为所述跳转代码对应的跳转结果语句,以使所述待转换代码跳转至所述标签执行语句。
32.可选的,根据本发明的一些实施例,所述将所述目的跳转标签的标签执行语句设定为所述跳转代码对应的跳转结果语句,以使所述待转换代码跳转至所述标签执行语句,还包括:
33.基于所述目的跳转标签的标签名称形成所述目的跳转语句的语句跳转名称;
34.将所述跳转代码链接至所述语句跳转名称,以使所述待转换代码跳转至所述标签
执行语句。
35.可选的,根据本发明的一些实施例,所述方法还包括:
36.根据所述第一位置信息与所述第二位置信息,判断所述goto跳转语句与所述标签定义语句之间是否存在位置关系异常;
37.当所述goto跳转语句与所述标签定义语句之间存在位置关系异常,中止对所述原始代码的语句转换并进行报错提醒。
38.第二方面,本发明实施例提供了一种电子设备,包括:存储器、处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现如本发明第一方面实施例中任意一项所述的编程语句转换方法。
39.第三方面,本发明实施例提供了一种计算机可读存储介质,所述存储介质存储有程序,所述程序被处理器执行实现如本发明第一方面实施例中任意一项所述的编程语句转换方法。
40.根据本发明实施例的编程语句转换方法、电子设备、存储介质,本发明至少具有如下有益效果:
41.本发明先根据原始代码构建目标语法树,再获取目标语法树中goto跳转语句所处位置的第一位置信息,进而根据第一位置信息,确定与goto跳转语句对应的目的跳转标签,并获取目标语法树中标签定义语句所处位置的第二位置信息。进一步,根据第一位置信息与第二位置信息,从goto跳转语句的各级祖先节点位置中获取与标签定义语句同级别的起点位置信息,再以第一位置信息作为终点位置信息,并根据起点位置信息与终点位置信息,从原始代码中划分得到待转换代码,最终将goto跳转语句替换为目的跳转语句,并根据目的跳转语句与待转换代码得到转换后的结果代码。本发明通过目标语法树中goto跳转语句所处位置的第一位置信息、标签定义语句所处位置的第二位置信息,来确定起点位置信息与终点位置信息,然后以起点位置信息与终点位置信息划分得到待转换代码,最终将goto跳转语句替换为目的跳转语句,实现了对原始代码的转换,进而实现对代码编译效率的提升。
42.本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
43.本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
44.图1为本发明实施例编程语句转换方法的执行流程示意图;
45.图2为本发明实施例编程语句转换方法的另一执行流程示意图;
46.图3为本发明实施例编程语句转换方法的另一执行流程示意图;
47.图4为本发明实施例编程语句转换方法的另一执行流程示意图;
48.图5为本发明实施例编程语句转换方法的另一执行流程示意图;
49.图6为本发明实施例编程语句转换方法的另一执行流程示意图;
50.图7为本发明实施例编程语句转换方法的另一执行流程示意图;
51.图8为本发明实施例编程语句转换方法的另一执行流程示意图;
52.图9为本发明实施例编程语句转换方法的转换示意图;
53.图10为本发明实施例编程语句转换方法的另一转换示意图;
54.图11为本发明实施例执行编程语句转换方法的电子设备示意图。
具体实施方式
55.下面详细描述本发明的实施例,实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
56.在本发明的描述中,若干的含义是一个或者多个,多个的含义是两个以上,大于、小于、超过等理解为不包括本数,以上、以下、以内等理解为包括本数。如果有描述到第一、第二只是用于区分技术特征为目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量或者隐含指明所指示的技术特征的先后关系。
57.在本发明的描述中,需要理解的是,涉及到方位描述,例如上、下、左、右、前、后等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
58.在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示意性实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或者两个以上实施例或示例中以合适的方式结合。
59.本发明的描述中,需要说明的是,除非另有明确的限定,设置、安装、连接等词语应做广义理解,所属技术领域技术人员可以结合技术方案的具体内容合理确定上述词语在本发明中的具体含义。另外,下文中对于具体步骤的标识并不代表对于步骤顺序与执行逻辑的限定,步骤之间的执行顺序与执行逻辑应参照对应的说明性表述进行理解与推定。
60.相关技术中,goto跳转语句广泛存在于多种编程语言的编程语句体系,例如:过程结构化查询语言(procedural structured query language,pl/sql)、c语言、c 、golang等编程语言。goto跳转语句之所以应用如此广泛,是因为goto跳转语句具备跳转自由的特性,能够在语法结构内任意跳动,类似于汇编语言中的jump语句。然而,goto跳转语句跳转自由的特性也给代码编译器的优化和执行带来了危害,goto跳转语句的应用场景下,很容易打断中央处理器(central processing unit,cpu)的预取指令流,从而降低代码的运行效率。
61.在一些程序编译中,可以把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析、语法分析、语义检查和中间代码生成、代码优化、目标代码生成。其中最主要的环节是进行词法分析和语法分析,又称为源程序分析,若词法分析和语法分析过程中发现有语法错误,程序编译则无法顺利进行。goto跳转语句跳转自由的特性同样也给程序编译带来危害,由于许多代码编译器无法兼容goto跳转语句的使用语法,因此在词法分析和语法分析过程中goto跳转语句的使用常常被判定为语法错误,从而令程序编译无法顺利进行。
62.本发明实施例提供的编程语句转换方法、电子设备、存储介质适用于采用命令式程序设计语言编写的面向过程的程序。命令式程序设计语言是基于动作的计算机语言,以冯诺依曼计算机体系结构为背景。采用命令式程序设计语言编写的面向过程的程序的主结构是由多个函数构成,函数包括输入参数、返回值、计算过程,计算过程采用一段程序语句实现。实现程序所采用的编程语言可以是现有的命令式程序设计语言中的任意一种,例如c语言或类c语言的编程语言等。
63.下面以附图为基础作出进一步说明。
64.本发明旨在至少解决现有技术中存在的技术问题之一。为此,本发明提出一种编程语句转换方法、电子设备、存储介质,能够对代码中的goto跳转语句进行转换,以提升程序的编译效率。
65.参照图1,根据本发明的第一方面实施例的编程语句转换方法,包括;
66.步骤s101,根据原始代码构建目标语法树,目标语法树反映原始代码的语句结构;
67.应理解,语法树(syntax tree)或者称为抽象语法树(abstract syntax tree,ast),是编译原理中的概念,其作用是将抽象的语法结构用树状形式来表现出来,树上的每个非叶子节点都是抽象语法中的一个运算符,叶子节点代表抽象语法树的具体对象。使用语法树可以让机器读懂抽象语法的内在含义,以及抽象语法的执行顺序。语法树的应用非常广泛,例如编程语言的源代码解析、表达式的分析,甚至是自然语言处理、机器翻译技术,都需要用到语法树技术。根据本发明提供的一些实施例,生成语法树通常都是需要两个过程:词法分析和语法分析。词法分析的任务是从左到右逐个字符地读入文件,即对文件中的字符流进行扫描然后根据构词规则识别单词。语法分析是编译过程的一个逻辑阶段。语法分析的任务是在词法分析的基础上将单词序列组合成各类语法短语。通常做法是由专业的编译器编程人员编写词法分析器和语法分析器来解析相应语句生成语法树。
68.根据本发明提供的一些实施例,编程语句转换方法需要先根据原始代码构建目标语法树。需要说明的是,原始代码指的是本发明编程语句转换方法处理前的尚未转换的代码,而目标语法树则反映原始代码的语句结构。应理解,原始代码的语句结构由若干分支母语句与分支子语句组成。本发明一些实施例中,能够在语句结构中产生分支子语句的分支母语句包括if语句、while语句、for语句等逻辑语句,也包括根据编程需求而确定的标签定义语句。应理解,能够在语句结构中产生分支子语句的分支母语句多种多样,不限于上述举出的具体实施例。根据本发明提供的一些实施例,在根据原始代码构建目标语法树的过程中,需要先从原始代码的语句结构中获取原始代码与目标语法树之间的构建转换关系,例如根据if语句、while语句、for语句等逻辑语句的位置,以确定目标语法树的层级、分支,从而进一步以构建转换关系为基础构建目标语法树。
69.步骤s102,获取目标语法树中goto跳转语句所处位置的第一位置信息;
70.需要说明的是,第一位置信息指的是反映goto跳转语句在目标语法树中所处位置的信息。应理解,原始代码中可以仅有一个goto跳转语句,也可以有多个goto跳转语句,因此对应的,第一位置信息可以包括目标语法树中的一处或者两处以上goto跳转语句分支位置。
71.步骤s103,根据第一位置信息,确定与goto跳转语句对应的目的跳转标签;
72.本发明一些实施例中,目的跳转标签设置于goto跳转语句后端,目的跳转标签承
接goto跳转语句的跳转目标,以使得goto跳转语句可以链接到目的跳转标签的标签执行语句。
73.步骤s104,获取目标语法树中标签定义语句所处位置的第二位置信息,标签定义语句用于定义目的跳转标签;
74.需要说明的是,第二位置信息指的是反映标签定义语句在目标语法树中所处位置的信息。应理解,标签定义语句用于定义目的跳转标签,一些实施例中,标签定义语句包括目的跳转标签的标签执行语句。根据本发明一些实施例,原始代码中,标签定义语句可以在目的跳转标签之前,也可以在目的跳转标签之后。当goto跳转语句被执行,基于目的跳转标签,goto跳转语句将链接到标签定义语句之中,从而进一步执行目的跳转标签的标签执行语句。根据本发明提供的一些实施例,根据第一位置信息可以明确goto跳转语句在目标语法树中的位置,因而可以确定goto跳转语句所对应的目的跳转标签,进一步,根据目的跳转标签遍历目标语法树,锁定标签定义语句的位置。
75.步骤s105,根据第一位置信息与第二位置信息,从goto跳转语句的各级祖先节点位置中获取与标签定义语句同级别的起点位置信息;
76.根据本发明提供的一些实施例,根据第一位置信息可以明确goto跳转语句在目标语法树的各个祖先节点位置,进而再根据第二位置信息中锁定的标签定义语句的位置,从goto跳转语句的各级祖先节点位置中获取与标签定义语句同级别的起点位置信息。需要说明的是,与标签定义语句同级别,指的是与标签定义语句具备相同的父节点。因此根据本发明提供的一些实施例,从goto跳转语句的各级祖先节点位置中获取与标签定义语句同级别的起点位置信息,则指的是从goto跳转语句的各级祖先节点位置中,先找到标签定义语句的父节点,然后往goto跳转语句所处的分支方向外延一级即可确定:goto跳转语句各级祖先节点位置中,与标签定义语句同级别的位置。从而进一步获取起点位置信息。需要明确,起点位置信息指的是目标语法树中,待转换代码划分范围起点位置所对应的位置信息。
77.步骤s106,以第一位置信息作为终点位置信息,并根据起点位置信息与终点位置信息,从原始代码中划分得到待转换代码;
78.需要明确,起点位置信息指的是目标语法树中,待转换代码划分范围终点位置所对应的位置信息。待转换代码,指的是原始代码中与goto跳转语句直接相关的、需要以目的跳转语句加以表述的部分代码。需要说明的是,之所以将goto跳转语句各级祖先节点位置中与标签定义语句同级别的位置信息,确定起点位置信息,并以第一位置信息作为终点位置信息,是因为需要确保本发明编程语句转换方法将goto跳转语句转换为目的跳转语句的过程中,即满足编程语法的正常转换也使得编程逻辑不发生变动。
79.步骤s107,将goto跳转语句替换为目的跳转语句,并根据目的跳转语句与待转换代码得到转换后的结果代码。
80.需要说明的是,目的跳转语句指的是区别于goto跳转语句、且同样能够起到跳转作用的编程语句。根据本发明提供的一些较为优选的实施例,目的跳转语句相较于goto跳转语句具备更好的兼容性,能够适配多种类型的代码编译器,令代码编译器的优化和执行顺利完成。本发明一些较为具体的实施例中,目的跳转语句的选用方案包括但不限于选用while-break语句、for-break语句、for-continue语句、try-catch语句等跳转语句作为本发明编程语句转换方法中的目的跳转语句。需要强调,本发明编程语句转换方法中的目的
跳转语句不限于上述举出的具体实施例。
81.参照图9,根据本发明一些较为具体的实施例,目标语法树920包括:
82.goto跳转语句对应的跳转终节点921,其中跳转终节点921对应的target即为目的跳转标签;
83.标签定义语句对应的标签定义节点922,其中标签定义节点922中的“print('goto here...')”即为目的跳转标签的标签执行语句;
84.跳转终节点921的各级祖先节点位置中,与标签定义节点922同级别的跳转始节点923;
85.标签定义节点922的父节点924。
86.应理解,在图9示出的实施例中,语句stmt1、语句if(x==2)、语句if(y==3)、...、语句stmtn所对应的节点,与标签定义节点922同级别。需要强调,本发明涉及的实施例包括但不限于图9示出的编程语句转换方法。
87.基于图9,对步骤s101至步骤s107作出进一步说明。本发明先根据原始代码910构建目标语法树920,再获取目标语法树920中跳转终节点921所处位置的第一位置信息,进而根据第一位置信息,确定与跳转终节点921对应的目的跳转标签target,并获取目标语法树920中标签定义节点922所处位置的第二位置信息。进一步,根据第一位置信息与第二位置信息,从跳转终节点921的各级祖先节点位置中获取与标签定义节点922同级别的起点位置信息,再以第一位置信息作为终点位置信息,并根据起点位置信息与终点位置信息,从原始代码910中划分得到待转换代码,最终将goto跳转语句替换为目的跳转语句,并根据目的跳转语句与待转换代码得到转换后的结果代码930。图9所示出的实施例中,目的跳转语句为while-break语句,应理解,熟悉本领域的技术人员在符合本发明精神的共享条件下,可以作出种种等同的变形或替换,例如当目的跳转语句为try-catch语句时,熟悉本领域的技术人员也可以实施步骤s101至步骤s107所表述的编程语句转换方法,仅需依据实际情况对具体实施细节作出相应的调整。
88.本发明先根据原始代码构建目标语法树,再获取目标语法树中goto跳转语句所处位置的第一位置信息,进而根据第一位置信息,确定与goto跳转语句对应的目的跳转标签,并获取目标语法树中标签定义语句所处位置的第二位置信息。进一步,根据第一位置信息与第二位置信息,从goto跳转语句的各级祖先节点位置中获取与标签定义语句同级别的起点位置信息,再以第一位置信息作为终点位置信息,并根据起点位置信息与终点位置信息,从原始代码中划分得到待转换代码,最终将goto跳转语句替换为目的跳转语句,并根据目的跳转语句与待转换代码得到转换后的结果代码。本发明通过目标语法树中goto跳转语句所处位置的第一位置信息、标签定义语句所处位置的第二位置信息,来确定起点位置信息与终点位置信息,然后以起点位置信息与终点位置信息划分得到待转换代码,最终将goto跳转语句替换为目的跳转语句,实现了对原始代码的转换,进而实现对代码编译效率的提升。
89.参照图2,根据本发明的一些实施例,根据第一位置信息与第二位置信息,从goto跳转语句的各级祖先节点位置中获取与标签定义语句同级别的起点位置信息,包括:
90.步骤s201,根据第一位置信息,获取goto跳转语句在目标语法树中的第一类节点位置;
91.需要说明的是,需要说明的是,第一位置信息指的是反映goto跳转语句在目标语法树中所处位置的信息。应理解,原始代码中可以仅有一个goto跳转语句,也可以有多个goto跳转语句,因此对应的,第一位置信息可以包括目标语法树中的一处或者两处以上goto跳转语句分支位置,即第一类节点位置。需明确,第一类节点位置可以包括一处或者两处以上goto跳转语句的分支位置。
92.步骤s202,根据第一类节点位置,确定goto跳转语句的各级祖先节点位置;
93.需要说明的是,在明确了目标语法树中各个第一类节点位置之后,需要进一步确定第一类节点位置的各级祖先节点位置。根据本发明一些实施例,由于目标语法树本身会带层级和相对位置,因此,在确认第一类节点位置之后,以第一类位置信息为基准,向第一类位置信息的父节点、祖父节点等各级祖先节点确认goto跳转语句的各级祖先节点位置。
94.步骤s203,根据第二位置信息,获取标签定义语句在目标语法树中的第二类节点位置;
95.需要说明的是,第二位置信息指的是反映标签定义语句在目标语法树中所处位置的信息。根据本发明一些实施例,原始代码中,标签定义语句可以在目的跳转标签之前,也可以在目的跳转标签之后。当goto跳转语句被执行,基于目的跳转标签,goto跳转语句将链接到标签定义语句之中,从而进一步执行目的跳转标签的标签执行语句。根据本发明提供的一些实施例,根据第一位置信息可以明确goto跳转语句在目标语法树中的位置,因而可以确定goto跳转语句所对应的目的跳转标签,进一步,在获取目的跳转标签之后,基于目的跳转标签遍历目标语法树,从而锁定标签定义语句的位置,即第二类节点位置。
96.步骤s204,根据各级祖先节点位置与第二类节点位置,获取与标签定义语句同级别的起点位置信息。
97.需要明确,起点位置信息指的是目标语法树中,待转换代码划分范围起点位置所对应的位置信息。根据本发明提供的一些实施例,在获取了goto跳转语句各级祖先节点位置与第二类节点位置之后,需要进一步根据goto跳转语句各级祖先节点位置与第二类节点位置,从goto跳转语句的各级祖先节点中,找到与标签定义语句同级别的跳转始节点,并根据跳转始节点在目标语法树中的所处位置来获取起点位置信息。需要说明的是,与标签定义语句同级别,指的是与标签定义语句具备相同的父节点。因此根据本发明提供的一些实施例,从goto跳转语句的各级祖先节点位置中获取与标签定义语句同级别的起点位置信息,则指的是从goto跳转语句的各级祖先节点位置中,先找到标签定义语句的父节点,然后往goto跳转语句所处的分支方向外延一级即可确定:goto跳转语句各级祖先节点位置中,与标签定义语句同级别的位置。从而进一步获取起点位置信息。
98.参照图3,根据本发明的一些实施例,根据各级祖先节点位置与第二类节点位置,获取与标签定义语句同级别的起点位置信息,还包括:
99.步骤s301,当原始代码中包括两个以上goto跳转语句,确定各个goto跳转语句的各级祖先节点位置在目标语法树中的层级位置排布;
100.根据本发明提供的一些实施例,原始代码中可以仅有一个goto跳转语句,也可以有多个goto跳转语句,因此对应的,第一位置信息可以包括目标语法树中的一处或者两处以上goto跳转语句分支位置。当原始代码中包括两个以上goto跳转语句,则需要从第一位置信息中确定各个goto跳转语句的各个第一类节点位置,然后根据各个第一类节点位置确
定各个goto跳转语句的各级祖先节点位置在目标语法树中的层级位置排布。根据本发明提供的一些实施例,各个goto跳转语句的各级祖先节点位置在目标语法树中的层级位置排布,指的是原始代码中每个goto跳转语句的各级祖先节点位置的集合,例如当原始代码中包括三个goto跳转语句,那么各个goto跳转语句的各级祖先节点位置在目标语法树中的层级位置排布中,就包括上述三个goto跳转语句的父节点位置、祖父节点位置等祖先节点位置。应理解,层级位置排布反映目标语法树中各个goto跳转语句的各级祖先节点的所处分支位置。
101.步骤s302,基于层级位置排布,获取各个goto跳转语句在目标语法树中的共同祖先节点位置,并获取共同祖先节点位置中与标签定义语句同级别的起点位置信息。
102.根据本发明提供的一些实施例,在获取了各个goto跳转语句的各级祖先节点位置在目标语法树中的层级位置排布之后,需要进一步基于层级位置排布得到起点位置信息。需要强调,起点位置信息指的是目标语法树中,待转换代码划分范围起点位置所对应的位置信息。因此,当原始代码中包括两个以上goto跳转语句的情况下,为了令原始代码中的所有goto跳转语句均可以被顺利转换成目的跳转语句,本发明一些较为优选的实施例中,基于层级位置排布,来获取各个goto跳转语句在目标语法树中的共同祖先节点位置,并从共同祖先节点位置中获取与标签定义语句同级别的共同祖先节点位置,最终根据与标签定义语句同级别的共同祖先节点位置得到起点位置信息。应理解,将共同祖先节点位置确定为起点位置信息,可以尽可能令原始代码中所有的goto跳转语句被顺利转换成目的跳转语句,使得本发明编程语句转换方法顺利执行,将原始代码转换为结果代码,以提升程序的编译效率。
103.参照图4,根据本发明的一些实施例,起点位置信息包括跳转始节点位置,终点位置信息包括两个以上跳转终节点位置,以第一位置信息作为终点位置信息,并根据起点位置信息与终点位置信息,从原始代码中划分得到待转换代码,包括:
104.步骤s401,将与标签定义语句同级别的共同祖先节点位置确定为跳转始节点位置;
105.根据本发明一些较为具体的实施例,起点位置信息包括跳转始节点位置。当原始代码中包括两个以上goto跳转语句的情况下,为了令原始代码中的所有goto跳转语句均可以被顺利转换成目的跳转语句,本发明一些较为优选的实施例中,需要基于层级位置排布,来获取各个goto跳转语句在目标语法树中的共同祖先节点位置,并从共同祖先节点位置中确定与标签定义语句同级别的共同祖先节点,然后将与标签定义语句同级别的共同祖先节点作为跳转始节点,从而进一步根据共同祖先节点位置确定跳转始节点位置。
106.步骤s402,将第一位置信息中的各个第一类节点位置确定为跳转终节点位置;
107.根据本发明一些较为具体的实施例,终点位置信息包括两个以上跳转终节点位置。当原始代码中包括两个以上goto跳转语句的情况下,为了适配各个goto跳转语句的跳转作用,一些较为优选的实施例中,需要将第一位置信息中的各个第一类节点位置确定为跳转终节点位置,以使得后续基于跳转始节点位置和跳转终节点位置,从原始代码中划分得到待转换代码的过程中,可以得到两段以上待转换代码,与原始代码中的两个以上goto跳转语句相对应。
108.步骤s403,基于跳转始节点位置和跳转终节点位置,从原始代码中划分得到待转
换代码。
109.根据本发明提供的一些较为具体的实施例,在确定了跳转始节点位置与跳转终节点位置之后,需要基于跳转始节点位置和跳转终节点位置,从原始代码中划分得到待转换代码。需要说明的是,由于在根据原始代码构建目标语法树的过程中,需要先从原始代码的语句结构中获取原始代码与目标语法树之间的构建转换关系,因此一些较为优选的实施例中,基于目标语法树从原始代码中划分得到待转换代码的过程,也需要参照原始代码与目标语法树之间的构建转换关系。根据本发明一些较为具体的实施例,参照图9,目标语法树920包括:goto跳转语句对应的跳转终节点921,其中跳转终节点921对应的target即为目的跳转标签;标签定义语句对应的标签定义节点922,其中标签定义节点922中的“print('goto here...')”即为目的跳转标签的标签执行语句;跳转终节点921的各级祖先节点位置中,与标签定义节点922同级别的跳转始节点923。应理解,基于跳转始节点923位置和跳转终节点921位置,从原始代码中划分得到待转换代码,需要参照原始代码与目标语法树之间的构建转换关系。
110.本发明一些更为具体的实施例中,基于跳转始节点923位置和跳转终节点921位置,从原始代码中划分得到待转换代码。首先,要确认跳转始节点923中对应的语句if(x==2)在原始代码中的位置、语句if(x==2)所对应的goto跳转语句在原始代码中的位置;以及,确认跳转始节点923中对应的语句if(y==3)在原始代码中的位置、语句if(y==3)所对应的goto跳转语句在原始代码中的位置。然后进一步,根据语句if(x==2)在原始代码中的位置、语句if(x==2)所对应的goto跳转语句在原始代码中的位置划定得到第一段待转换代码;以及,根据语句if(y==3)在原始代码中的位置、语句if(y==3)所对应的goto跳转语句在原始代码中的位置,划定得到第二段待转换代码。应理解,上述第一段待转换代码、第二段代码即图9示出的实施例中从原始代码中划分得到待转换代码。
111.参照图5,根据本发明的一些实施例,以第一位置信息作为终点位置信息,并根据起点位置信息与终点位置信息,从原始代码中划分得到待转换代码,还包括:
112.步骤s501,获取原始代码与目标语法树之间的构建转换关系;
113.根据本发明提供的一些实施例,在根据原始代码构建目标语法树的过程中,需要先从原始代码的语句结构中获取原始代码与目标语法树之间的构建转换关系,例如根据if语句、while语句、for语句等逻辑语句的位置,以确定目标语法树的层级、分支,从而进一步以构建转换关系为基础构建目标语法树。应理解,在本发明一些实施例中,根据起点位置信息与终点位置信息,从原始代码中划分得到待转换代码,同样需要用到原始代码与目标语法树之间的构建转换关系。
114.步骤s502,根据起点位置信息与构建转换关系,得到起点位置信息在原始代码中对应的转换起始行;
115.步骤s503,根据终点位置信息与构建转换关系,得到终点位置信息在原始代码中对应的转换终止行;
116.步骤s504,根据转换起始行与转换终止行,划分得到待转换代码。
117.根据本发明一些较为具体的实施例,参照图9,基于跳转始节点923位置和跳转终节点921位置,从原始代码中划分得到待转换代码。首先,要根据起点位置信息与构建转换关系确认跳转始节点923所对应的转换起始行,即语句if(x==2)在原始代码中的位置与
语句if(y==3)在原始代码中的位置。然后,根据起点位置信息与构建转换关系确认跳转终节点921所对应的转换终止行,即语句if(x==2)所对应的goto跳转语句在原始代码中的位置与语句if(x==2)所对应的goto跳转语句在原始代码中的位置。然后进一步,根据语句if(x==2)在原始代码中的转换起始行、语句if(x==2)所对应的goto跳转语句在原始代码中的转换终止行,划定得到第一段待转换代码;以及,根据语句if(y==3)在原始代码中的转换起始行、语句if(y==3)所对应的goto跳转语句在原始代码中的转换终止行,划定得到第二段待转换代码。应理解,上述第一段待转换代码、第二段代码即图9示出的实施例中从原始代码中划分得到待转换代码。
118.根据本发明提供的一些较为具体的实施例,以第一位置信息作为终点位置信息,并根据起点位置信息与终点位置信息,从原始代码中划分得到待转换代码,还可以先对目标语法树的层级、分支作出调整,再进一步将调整后的目标语法树,重新转换成代码的语句结构,最终得到结果代码。参照图步骤s10,本发明一些实施例中,将调整后的目标语法树称为结果语法树940,旨在说明结果语法树940反映结果代码的语句结构。本发明一些实施例中,结果语法树940包括:
119.结果终节点941,结果终节点941由跳转终节点921转换得到,其中结果终节点941对应的target即为目的跳转标签;
120.标签执行语句所对应的标签执行节点942,其中标签执行节点942中的“print('goto here...')”即为目的跳转标签的标签执行语句;
121.跳转引导节点944,跳转引导节点944由跳转始节点923转换得到;
122.目的跳转语句所对应的跳转引导节点944,应理解,跳转引导节点944中的语句target:while(1)与结果终节点941中的语句break target,作为一个整体,共同起到目的跳转语句的作用。
123.标签定义节点922的父节点924在结果语法树940中的位置转换为跳转引导节点944的父节点945。
124.需要说明的是,本发明一些实施例中的编程语句转换方法,按照图步骤s10所示出的实施例,先根据原始代码910构建目标语法树920,再获取目标语法树920中跳转终节点921所处位置的第一位置信息,进而根据第一位置信息,确定与跳转终节点921对应的目的跳转标签target,并获取目标语法树920中标签定义节点922所处位置的第二位置信息。进一步,根据第一位置信息与第二位置信息,从跳转终节点921的各级祖先节点位置中获取与标签定义节点922同级别的起点位置信息,再以第一位置信息作为终点位置信息,并根据起点位置信息与终点位置信息,从原始代码910中划分得到待转换代码,进而基于待转换代码将目标语法树920转换为结果语法树940,以明确结果代码930的语句结构,最终基于结果语法树940,最终在结构语法树转换为结果代码的过程中,将goto跳转语句替换为目的跳转语句。应理解,图步骤s10所示出的实施例中,目的跳转语句为while-break语句,应理解,熟悉本领域的技术人员在符合本发明精神的共享条件下,可以作出种种等同的变形或替换,例如当目的跳转语句为try-catch语句时,熟悉本领域的技术人员也可以将图步骤s10所示出的编程语句转换方法,仅需依据实际情况对具体实施细节作出相应的调整。
125.参照图6,根据本发明的一些实施例,将goto跳转语句替换为目的跳转语句,并根据目的跳转语句与待转换代码得到转换后的结果代码,包括:
126.步骤s601,将待转换代码纳入目的跳转语句的执行部分,转换起始行对应于执行部分的起始代码、转换终止行对应于执行部分的跳转代码;
127.需要说明的是,目的跳转语句的执行部分,指的是目的跳转语句中除跳转代码以外的代码内容。例如,当while-break作为目的跳转语句时,代码“while(1){if(x==2){break target;}}”中,除“break target”以外的代码内容均为while-break的执行部分。应理解,为了结果代码中的代码执行逻辑与原始代码中的代码执行逻辑保持一致,本发明一些实施例中,将转换起始行对应于执行部分的起始代码、转换终止行对应于执行部分的跳转代码,以确保原始代码中的代码执行逻辑不会发生变动。
128.步骤s602,将目的跳转标签的标签执行语句设定为跳转代码对应的跳转结果语句,以使待转换代码跳转至标签执行语句。
129.需要说明的是,目的跳转标签对应的标签执行语句,被定义于标签定义语句之中。例如,当标签定义语句为“target:print('goto here...')”,则标签执行语句即为“print('goto here...')”。目的跳转语句的跳转代码,指的是目的跳转语句中起到跳转作用的代码内容。例如,当while-break作为目的跳转语句时,代码“target:while(1){if(x==2){break target;}}”中,“break target”即为while-break的跳转代码。而跳转代码对应的跳转结果语句,则指的是作为跳转结果代码语句。例如当while-break作为目的跳转语句时,代码“target:while(1){if(x==2){break target;}}print('goto here...')”中,“print('goto here...')”即为跳转代码对应的跳转结果语句。需要说明的是,将目的跳转标签的标签执行语句设定为跳转代码对应的跳转结果语句,以使待转换代码跳转至标签执行语句,是为了令结果代码中的代码执行逻辑与原始代码中的代码执行逻辑保持一致。
130.根据本发明一些较为具体的实施例,参照图9,具体而言,步骤s601将待转换代码纳入目的跳转语句的执行部分,转换起始行对应于执行部分的起始代码、转换终止行对应于执行部分的跳转代码,指的是,将“if(x==2){goto target;}if(y==3){goto target;}”转换为“target:while(1){if(x==2){break target;}if(y==3){break target;}}”。步骤s602,将目的跳转标签的标签执行语句设定为跳转代码对应的跳转结果语句,以使待转换代码跳转至标签执行语句,指的是,当跳转代码“break target”被执行,“target:while(1)”将会跳转至与跳转代码“break target”对应的跳转结果语句“print('goto here...')”,其中目的跳转标签“target”的标签执行语句即“print('goto here...')”。
131.参照图7,根据本发明的一些实施例,将目的跳转标签的标签执行语句设定为跳转代码对应的跳转结果语句,以使待转换代码跳转至标签执行语句,还包括:
132.步骤s701,基于目的跳转标签的标签名称形成目的跳转语句的语句跳转名称;
133.步骤s702,将跳转代码链接至语句跳转名称,以使待转换代码跳转至标签执行语句。
134.根据本发明一些较为具体的实施例,目的跳转标签的标签名称即goto跳转语句所引出的目的跳转标签的名称,在图9示出的一些实施例中,目的跳转标签的标签名称即“target”。而基于目的跳转标签的标签名称形成目的跳转语句的语句跳转名称,则是将“if(x==2){goto target;}if(y==3){goto target;}”转换为“target:while(1){if(x==2){break target;}if(y==3){break target;}}”。需要说明的是,将跳转代码链接至
语句跳转名称,以使待转换代码跳转至标签执行语句,指的是将跳转代码“break target”链接至语句跳转名称“target:while(1)”。应理解,通过步骤s701至步骤s702,使得本发明编程语句转换方法在实现语句转换的同时,还可以结果代码中的代码执行逻辑与原始代码中的代码执行逻辑保持一致。
135.参照图8,根据本发明的一些实施例,编程语句转换方法还包括:
136.步骤s801,根据第一位置信息与第二位置信息,判断goto跳转语句与标签定义语句之间是否存在位置关系异常;
137.步骤s802,当goto跳转语句与标签定义语句之间存在位置关系异常,中止对原始代码的语句转换并进行报错提醒。
138.需要说明的是,判断goto跳转语句与标签定义语句之间是否存在位置关系异常的标准可以根据实际情况灵活设定,包括:标签定义语句在目标语法树中所处层级位置过低,以至于编程语句转换方法无法顺利执行;标签定义语句的定义不规范;标签定义语句与一些goto跳转语句嵌套于同一语句结构中,但该语句结构未被执行以至于标签定义语句无法被转换。应理解,断goto跳转语句与标签定义语句之间是否存在位置关系异常的标准包括但不限于上述举出的具体情形。
139.图11示出了本发明实施例提供的电子设备1100。电子设备1100包括:处理器1101、存储器1102及存储在存储器1102上并可在处理器1101上运行的计算机程序,计算机程序运行时用于执行上述的编程语句转换方法。
140.处理器1101和存储器1102可以通过总线或者其他方式连接。
141.存储器1102作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序,如本发明实施例描述的编程语句转换方法。处理器1101通过运行存储在存储器1102中的非暂态软件程序以及指令,从而实现上述的编程语句转换方法。
142.存储器1102可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需要的应用程序。存储数据区可存储执行上述的编程语句转换方法。此外,存储器1102可以包括高速随机存取存储器1102,还可以包括非暂态存储器1102,例如至少一个储存设备存储器件、闪存器件或其他非暂态固态存储器件。在一些实施方式中,存储器1102可选包括相对于处理器1101远程设置的存储器1102,这些远程存储器1102可以通过网络连接至该电子设备1100。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
143.实现上述的编程语句转换方法所需的非暂态软件程序以及指令存储在存储器1102中,当被一个或者多个处理器1101执行时,执行上述的编程语句转换方法,例如,执行图1中的方法步骤s101至步骤s107、图2中的方法步骤s201至步骤s204、图3中的方法步骤s301至步骤s302、图4中的方法步骤s401至步骤s403、图5中的方法步骤s501至步骤s504、图6中的方法步骤s601至步骤s602、图7中的方法步骤s701至步骤s702、图8中的方法步骤s801至步骤s802。
144.本发明实施例还提供了计算机可读存储介质,存储有计算机可执行指令,计算机可执行指令用于执行上述的编程语句转换方法。
145.在一实施例中,该计算机可读存储介质存储有计算机可执行指令,该计算机可执
行指令被一个或者两个以上控制处理器执行,例如,执行图1中的方法步骤s101至步骤s107、图2中的方法步骤s201至步骤s204、图3中的方法步骤s301至步骤s302、图4中的方法步骤s401至步骤s403、图5中的方法步骤s501至步骤s504、图6中的方法步骤s601至步骤s602、图7中的方法步骤s701至步骤s702、图8中的方法步骤s801至步骤s802。
146.以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
147.本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、储存设备存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包括计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。还应了解,本发明实施例提供的各种实施方式可以任意进行组合,以实现不同的技术效果。
148.以上是对本发明的较佳实施进行了具体说明,但本发明并不局限于上述实施方式,熟悉本领域的技术人员在不违背本发明精神的共享条件下还可作出种种等同的变形或替换,这些等同的变形或替换均包括在本发明权利要求所限定的范围内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献