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

不可达语句识别方法、C语言与Java转换方法及装置与流程

2022-03-26 16:59:29 来源:中国专利 TAG:

不可达语句识别方法、c语言与java转换方法及装置
技术领域
1.本技术涉及代码转换技术领域,特别是涉及一种不可达语句识别方法、c语言与java转换方法及装置。


背景技术:

2.编程语言的自动转换在软件移植、维护等领域中可以缩短大量的开发周期,节省软件的开发成本。但目前国内外对c语言到java语言的转换研究较少,进而对c2j前c语言的语法检查研究就更少了。在从cobol到java翻译系统中,是通过算法可靠地实现了goto和perform复合语句消除。
3.目前对c语言的语法检查主要是通过一定的算法或规则,借用一些工具来实现,比如c2j 工具或者novosoft公司的c2j工具。
4.然而,现有的一些c2j前c语言的语法检查方案存在许多不足,c2j 工具能将c/c 源代码转换为语义上基本等价的java程序,但不能处理goto语句,不能区分*号是作为乘法运算符还是作为指针的间接运算符;novosoft公司的c2j工具解决了c2j 工具中许多问题,如goto语句。但是它的缺点是代码膨胀率太大,转换后代码的逻辑难以理解。这主要是因为它加入了许多复杂的转换模式以模拟c源程序的行为表现,而且它将各种数据结构存储在一个巨大的数组中,避开了java的类型检查和运行时安全检查,很难与主流的java结合。


技术实现要素:

5.基于此,有必要针对上述技术问题,提供一种能够识别c语言中不可达语句的不可达语句识别方法、c语言与java转换方法及装置。
6.第一方面,本技术提供一种c语言中不可达语句识别方法,所述c语言中不可达语句识别方法包括:
7.获取待处理c语言程序;
8.对所述待处理c语言程序进行词法分析以得到待处理单词;
9.对所述待处理单词进行语法分析以建立语法树;
10.通过深度优先遍历法对所述语法树进行遍历,以识别所述语法树中的不可达语句。
11.在其中一个实施例中,所述对所述待处理c语言程序进行词法分析以得到待处理单词,包括:
12.对所述待处理c语言程序进行预处理以删除无用符号;
13.按照关键字识别规则对预处理后的所述待处理c语言程序进行识别以得到待处理单词。
14.在其中一个实施例中,所述对所述待处理单词进行语法分析以建立语法树,包括:
15.将所述待处理单词进行重组得到语法单位;
16.对所述语法单位进行连接得到语法树。
17.在其中一个实施例中,所述对所述语法单位进行连接得到语法树之前,还包括:
18.对所述语法单位进行形式检查以修正所述语法单位。
19.在其中一个实施例中,所述通过深度优先遍历法对所述语法树进行遍历,以识别所述语法树中的不可达语句,包括:
20.通过深度优先遍历法对所述语法树进行遍历,以根据所述语法树中的关键词识别所述语法树中的不可达语句。
21.在其中一个实施例中,所述通过深度优先遍历法对所述语法树进行遍历,以根据所述语法树中的关键词识别所述语法树中的不可达语句,包括以下至少一种:
22.通过深度优先遍历法对所述语法树进行遍历,以判断所述语法树中是否存在跳转关键词,若是,则将跳转关键词对应子树后的语句作为不可达语句;
23.通过深度优先遍历法对所述语法树进行遍历,以判断所述语法树中是否存在循环关键词,当存在所述循环关键词、所述循环关键词对应的循环条件恒成立,且所述循环关键词对应的循环体中不存在跳转关键词时,将循环关键词对应子树后的语句作为不可达语句;
24.通过深度优先遍历法对所述语法树进行遍历,以判断所述语法树中是否存在分支关键词,当存在所述分支关键词,且所述分支关键词对应的分支中均存在有跳转关键词时,将分支关键词对应子树后的语句作为不可达语句。
25.在其中一个实施例中,所述通过深度优先遍历法对所述语法树进行遍历,以识别所述语法树中的不可达语句之后,包括:
26.对所述不可达语句进行注释。
27.第二方面,本技术提供一种c语言程序转换为java程序的方法,所述c语言程序转换为java程序的方法包括:
28.根据上述的c语言中不可达语句识别方法对c语言程序识别得到不可达语句;
29.根据所述不可达语句,将所述c语言程序转换为java程序。
30.第三方面,本技术提供一种c语言中不可达语句识别装置,所述c语言中不可达语句识别装置包括:
31.源程序获取模块,用于获取待处理c语言程序;
32.词法分析模块,用于对所述待处理c语言程序进行词法分析以得到待处理单词;
33.语法分析模块,用于对所述待处理单词进行语法分析以建立语法树;
34.第一识别模块,用于通过深度优先遍历法对所述语法树进行遍历,以识别所述语法树中的不可达语句。
35.第四方面,本技术提供一种c语言程序转换为java程序的装置,所述c语言程序转换为java程序的装置包括:
36.第二识别模块,用于根据上述的c语言中不可达语句识别装置对c语言程序识别得到不可达语句;
37.转换模块,用于根据所述不可达语句,将所述c语言程序转换为java程序。
38.第五方面,本技术提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述任意一个实施例中所述的方法的
步骤。
39.第六方面,本技术提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一个实施例中所述的方法的步骤。
40.第七方面,本技术提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述任意一个实施例中所述的方法的步骤。
41.上述不可达语句识别方法、c语言与java转换方法及装置,采用词法分析和语法分析,利用深度优先遍历方法遍历语法树,找出其中的不可达语句,可以对c语言源程序进行很好的语法解析,获取单词符号和语义结构,避免造成转换后的java代码无法执行。
附图说明
42.图1为一个实施例中不可达语句识别方法的应用环境图;
43.图2为一个实施例中不可达语句识别方法的流程示意图;
44.图3为一个实施例中的不可达语句的分类示意图;
45.图4为一个实施例中的语法树可视化的截图;
46.图5为一个实施例中的注释结果的示意图;
47.图6为一个实施例中的不可达语句的实现流程图;
48.图7为一个实施例中c语言与java转换的流程示意图;
49.图8为一个实施例中不可达语句识别装置的结构框图;
50.图9为一个实施例中c语言与java转换装置的结构框图;
51.图10为一个实施例中计算机设备的内部结构图。
具体实施方式
52.为了使本技术的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本技术进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本技术,并不用于限定本技术。
53.本技术实施例提供的不可达语句识别方法、c语言与java转换方法,可以应用于如图1所示的应用环境中。其中,终端102通过网络与服务器104进行通信。数据存储系统可以存储服务器104需要处理的数据。数据存储系统可以集成在服务器104上,也可以放在云上或其他网络服务器上。终端102可以向服务器104发送待处理c语言程序,从而服务器104对待处理c语言程序进行词法分析以得到待处理单词;对待处理单词进行语法分析以建立语法树;通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句。这样采用词法分析和语法分析,利用深度优先遍历方法遍历语法树,找出其中的不可达语句,可以对c语言源程序进行很好的语法解析,获取单词符号和语义结构,避免造成转换后的java代码无法执行。
54.其中,终端102可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑、物联网设备和便携式可穿戴设备,物联网设备可为智能音箱、智能电视、智能空调、智能车载设备等。便携式可穿戴设备可为智能手表、智能手环、头戴设备等。服务器104可以用独立的服务器或者是多个服务器组成的服务器集群来实现。在其他的实施例中,上述不可达语句识别方法可以仅应用于服务器中,在此不做具体限定。
55.在一个实施例中,如图2所示,提供了一种不可达语句识别方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
56.s202:获取待处理c语言程序。
57.具体地,待处理c语言程序是指源程序,该源程序是以c语言撰写的,c语言代码中可能存在大量的不可达语句(比如goto语句、return之后的语句等)。这些不可达的语句对c语言程序的编译、执行是没有影响的,但转译为java程序后编译会报错,阻碍程序的执行。
58.其中,结合图3所示,图3为一个实施例中的不可达语句的分类示意图,在该实施例中,在c语言程序中,导致这些语句不可达的原因主要分三种:跳转语句不可达、while死循环不可达以及分支选择不可达。跳转语句不可达主要是由continue/break/goto/return关键词引起的不可达,continue、break、goto和return的搭配使用,在一些场景下会提前结束当前段程序,使得后续程序永远不会执行,处于不可达状态。死循环语句不可达主要由while语句引起,如果while中的判断条件一直成立,且程序无法跳出,则会导致后续语句不可达。分支选择不可达则是由if、else、switch语句引起,在c语言程序代码中,若每个分支都有return类型语句,则分支的后续的语句块永远无法执行到,为不可达状态。
59.s204:对待处理c语言程序进行词法分析以得到待处理单词。
60.具体地,词法分析是为了提取待处理c语言程序中的不同类别的关键单词的,其中该关键单词可以分为五类,具体为标识符、保留字、常数、运算符和界符等,在其他的实施例中,该关键单词还可以包括其他的类别。
61.其中,服务器可以在程序中配置相应的规则,这个规则主要是识别相应的关键字,根据不同的关键字进行不同的分析处理。具体地,服务器将待处理c语言程序拆分成单个的文字和符号,而在程序中主要概括为标识符、保留字、常数、运算符和界符这五类。
62.s206:对待处理单词进行语法分析以建立语法树。
63.具体地,语法分析是根据c.g4中定义的规则将待处理单词重新组合成句子和程序段。并根据句子和程序段质检的关系建立语法树。
64.s208:通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句。
65.具体地,深度优先遍历法属于图算法的一种,是一个针对图和树的遍历算法,其过程简单来说是对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。
66.服务器根据编译原理知识,采用语法树解析重新遍历的方式,利用深度优先遍历方法遍历语法树,找出其中的不可达语句进行注释。可以对c语言源程序进行很好的语法解析,获取单词符号和语义结构,自动注释不可达语句,避免造成转换后的java代码无法执行。
67.上述不可达语句识别方法,采用词法分析和语法分析,利用深度优先遍历方法遍历语法树,找出其中的不可达语句,可以对c语言源程序进行很好的语法解析,获取单词符号和语义结构,避免造成转换后的java代码无法执行。
68.在其中一个实施例中,对待处理c语言程序进行词法分析以得到待处理单词,包括:对待处理c语言程序进行预处理以删除无用符号;按照关键字识别规则对预处理后的待处理c语言程序进行识别以得到待处理单词。
69.具体地,提取单词符号是语法检查的第一步,也称为词法分析。在此阶段中,首先
是从左到右逐个字符的读入源程序,然后对读入的内容进行预处理,去除一些无用的符号如换行符、制表符等,最后对源程序从头到尾进行扫描,将其分解为标识符、保留字、常数、运算符和界符这五类单词(token)。词法分析面向的是单个的字符,目的是把它们组成有效的单词,是所有后续工作的基础,如果这一步出错,比如明明是左移符号

《《’却被拆分成

《’和

《’就会对下文造成不可挽回的影响。
70.在其中一个实施例中,对待处理单词进行语法分析以建立语法树,包括:将待处理单词进行重组得到语法单位;对语法单位进行连接得到语法树。
71.在其中一个实施例中,对语法单位进行连接得到语法树之前,还包括:对语法单位进行形式检查以修正语法单位。
72.建立语法树是语法检查的第二步,也称为语法分析。这一步是把词法分析阶段的单词符号串化为短语、句子、程序段这样的语法单位,对语法单位中缺少分号、括号不匹配、begin/end不配对等错误进行初步检查,并将得到的语言结构以树的形式表示。以最简单的c代码为例,经过语法分析后的语法树可以参见图4所示。其中,图4中各个单元的含义为:compliationunit:编译单元;translationunit:翻译单元;externaldeclaration:外部声明;functiondefintion:函数定义;declarationspecifiers:声明说明符;typespecifier:种类说明符,1:种类1;int:”int”:该函数的返回值类型为int型,对应左边代码中main()前面的int;functiondeclarator:函数声明;identifier:标识符,即main后面的(、)为标识符;compoundstatement:复合语句,指函数体;leftbrace、rightbrace:指代码中的{、};blockitem:指代码块;int:”int”:指代码中“int a;”中的int;initdeclarator:初始化声明;identifier:定义,a:指代码中被定义为int类型的属性a;semi:标识符,“;”表示一句代码结束。图4中是语法树可视化的截图,与上述的语法单位无关,语法单位被定义在了代码规则里。
73.在其中一个实施例中,通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句,包括:通过深度优先遍历法对语法树进行遍历,以根据语法树中的关键词识别语法树中的不可达语句。
74.在其中一个实施例中,通过深度优先遍历法对语法树进行遍历,以根据语法树中的关键词识别语法树中的不可达语句,包括以下至少一种:通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在跳转关键词,若是,则将跳转关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在循环关键词,当存在循环关键词、循环关键词对应的循环条件恒成立,且循环关键词对应的循环体中不存在跳转关键词时,将循环关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在分支关键词,当存在分支关键词,且分支关键词对应的分支中均存在有跳转关键词时,将分支关键词对应子树后的语句作为不可达语句。
75.具体地,在本实施例中,第一阶段注重的是每个单词是否合法,第二阶段是将词法分析中得到的单词按语法规则进行组合,这里是使用前两步产生的结果来真正理解源程序所要表达的功能。在本阶段中,采用深度优先遍历(depth first serach)的方法,对语法树分支进行深度优先遍历。
76.其中,跳转关键词可以包括continue、break、goto以及return等等。循环关键词可
以包括while。分支关键词可以包括if、else等等。
77.c语言程序中的每一个花括号的内容都是一个语句块,在语法树中会以一颗颗子树的形式从左往右依次展开。在每一颗子树的遍历过程中,如果发现continue/break/goto/return等跳转关键词,则该子树中的后续节点不再进行遍历,被视为不可达语句。如果某一颗子树的左子树是while时,表明该子树与while语句构成一个循环体,遍历到该循环体的条件表达式时,若表达式恒成立,且该子树中未发现跳转关键词break或者出现return时,则认为该语法树的后续所有节点均为不可达状态。同理,在遍历语法树时遇到if/else和switch分支选择语句块时,会设置flag标志位,用于记录该语句块下的每一个子树在遍历时是否遇到关键词return,若每一个子树中均有return,则该语法树的后续所有节点均为不可达状态。在c2j过程中,对可达语句进行c语言转java语言的自动翻译,而所有不可达语句以注释的形式保留在翻译后的java程序中,直至遍历结束。至此,本语法检查方法完成。
78.在其中一个实施例中,通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句之后,包括:对不可达语句进行注释。
79.具体地,可以参见图5所示,其中通过双斜杠等方式来对不可达语句进行注释。java中的常用的注释一般为//或者/**/。
80.具体地,参见图6所示,图6为一个实施例中的不可达语句的实现流程图,在该实施例中,先提取单词符号,然后建立语法树,最后获取语义结构,找出不可达语句并注释。
81.在一个实施例中,如图7所示,提供了一种c语言与java转换方法,以该方法应用于图1中的服务器为例进行说明,包括以下步骤:
82.s702:根据上述任意一个实施例中的c语言中不可达语句识别方法对c语言程序识别得到不可达语句。
83.s704:根据不可达语句,将c语言程序转换为java程序。
84.本实施例中,实现c2j前c语言的语法检查,自动找出不可达语句并进行注释,不需要手动梳理程序执行流程。同时能够很好地进行goto、return、break等c语言语句的转换处理,避免转换成的java程序编译、执行过程中发生错误。
85.上述c语言与java转换方法,采用词法分析和语法分析,利用深度优先遍历方法遍历语法树,找出其中的不可达语句,可以对c语言源程序进行很好的语法解析,获取单词符号和语义结构,避免造成转换后的java代码无法执行。
86.应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
87.基于同样的发明构思,本技术实施例还提供了一种用于实现上述所涉及的不可达语句识别方法、c语言与java转换方法的不可达语句识别装置、c语言与java转换装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一
个或多个不可达语句识别装置、c语言与java转换装置实施例中的具体限定可以参见上文中对于不可达语句识别方法、c语言与java转换方法的限定,在此不再赘述。
88.在一个实施例中,如图8所示,提供了一种不可达语句识别装置,包括:源程序获取模块801、词法分析模块802、语法分析模块803和第一识别模块804,其中:
89.源程序获取模块801,用于获取待处理c语言程序;
90.词法分析模块802,用于对待处理c语言程序进行词法分析以得到待处理单词;
91.语法分析模块803,用于对待处理单词进行语法分析以建立语法树;
92.第一识别模块804,用于通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句。
93.在其中一个实施例中,上述词法分析模块802可以包括:
94.第一预处理单元,用于对待处理c语言程序进行预处理以删除无用符号;
95.词法分析单元,用于按照关键字识别规则对预处理后的待处理c语言程序进行识别以得到待处理单词。
96.在其中一个实施例中,上述语法分析模块803可以包括:
97.重组单元,用于将待处理单词进行重组得到语法单位;
98.语法分析单元,用于对语法单位进行连接得到语法树。
99.在其中一个实施例中,上述语法分析模块803还可以包括:
100.第二预处理单元,用于对语法单位进行形式检查以修正语法单位。
101.在其中一个实施例中,上述第一识别模块804还用于通过深度优先遍历法对语法树进行遍历,以根据语法树中的关键词识别语法树中的不可达语句。
102.在其中一个实施例中,上述第一识别模块804还用于执行以下至少一种:通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在跳转关键词,若是,则将跳转关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在循环关键词,当存在循环关键词、循环关键词对应的循环条件恒成立,且循环关键词对应的循环体中不存在跳转关键词时,将循环关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在分支关键词,当存在分支关键词,且分支关键词对应的分支中均存在有跳转关键词时,将分支关键词对应子树后的语句作为不可达语句。
103.在其中一个实施例中,上述装置还包括:
104.注释模块,用于对不可达语句进行注释。
105.在一个实施例中,如图9所示,提供了一种c语言与java转换装置,包括:第二识别模块901和转换模块902,其中:
106.第二识别模块901,用于根据上述任意一个实施例中的c语言中不可达语句识别装置对c语言程序识别得到不可达语句;
107.转换模块902,用于根据不可达语句,将c语言程序转换为java程序。
108.上述不可达语句识别装置、c语言与java转换装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
109.在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图10所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质和内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种不可达语句识别方法、c语言与java转换方法。
110.本领域技术人员可以理解,图10中示出的结构,仅仅是与本技术方案相关的部分结构的框图,并不构成对本技术方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
111.在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:获取待处理c语言程序;对待处理c语言程序进行词法分析以得到待处理单词;对待处理单词进行语法分析以建立语法树;通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句。
112.在一个实施例中,处理器执行计算机程序时所实现的对待处理c语言程序进行词法分析以得到待处理单词,包括:对待处理c语言程序进行预处理以删除无用符号;按照关键字识别规则对预处理后的待处理c语言程序进行识别以得到待处理单词。
113.在一个实施例中,处理器执行计算机程序时所实现的对待处理单词进行语法分析以建立语法树,包括:将待处理单词进行重组得到语法单位;对语法单位进行连接得到语法树。
114.在一个实施例中,处理器执行计算机程序时所实现的对语法单位进行连接得到语法树之前,还包括:对语法单位进行形式检查以修正语法单位。
115.在一个实施例中,处理器执行计算机程序时所实现的通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句,包括:通过深度优先遍历法对语法树进行遍历,以根据语法树中的关键词识别语法树中的不可达语句。
116.在一个实施例中,处理器执行计算机程序时所实现的通过深度优先遍历法对语法树进行遍历,以根据语法树中的关键词识别语法树中的不可达语句,包括以下至少一种:通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在跳转关键词,若是,则将跳转关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在循环关键词,当存在循环关键词、循环关键词对应的循环条件恒成立,且循环关键词对应的循环体中不存在跳转关键词时,将循环关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在分支关键词,当存在分支关键词,且分支关键词对应的分支中均存在有跳转关键词时,将分支关键词对应子树后的语句作为不可达语句。
117.在一个实施例中,处理器执行计算机程序时所实现的通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句之后,包括:对不可达语句进行注释。
118.在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:根据上述任意一个实施例的c语言中不可达语句识别方法对c语言程序识别得到不可达语句;根据不可达语句,将c语言程序
转换为java程序。
119.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取待处理c语言程序;对待处理c语言程序进行词法分析以得到待处理单词;对待处理单词进行语法分析以建立语法树;通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句。
120.在一个实施例中,计算机程序被处理器执行时所实现的对待处理c语言程序进行词法分析以得到待处理单词,包括:对待处理c语言程序进行预处理以删除无用符号;按照关键字识别规则对预处理后的待处理c语言程序进行识别以得到待处理单词。
121.在一个实施例中,计算机程序被处理器执行时所实现的对待处理单词进行语法分析以建立语法树,包括:将待处理单词进行重组得到语法单位;对语法单位进行连接得到语法树。
122.在一个实施例中,计算机程序被处理器执行时所实现的对语法单位进行连接得到语法树之前,还包括:对语法单位进行形式检查以修正语法单位。
123.在一个实施例中,计算机程序被处理器执行时所实现的通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句,包括:通过深度优先遍历法对语法树进行遍历,以根据语法树中的关键词识别语法树中的不可达语句。
124.在一个实施例中,计算机程序被处理器执行时所实现的通过深度优先遍历法对语法树进行遍历,以根据语法树中的关键词识别语法树中的不可达语句,包括以下至少一种:通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在跳转关键词,若是,则将跳转关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在循环关键词,当存在循环关键词、循环关键词对应的循环条件恒成立,且循环关键词对应的循环体中不存在跳转关键词时,将循环关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在分支关键词,当存在分支关键词,且分支关键词对应的分支中均存在有跳转关键词时,将分支关键词对应子树后的语句作为不可达语句。
125.在一个实施例中,计算机程序被处理器执行时所实现的通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句之后,包括:对不可达语句进行注释。
126.在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:根据上述任意一个实施例的c语言中不可达语句识别方法对c语言程序识别得到不可达语句;根据不可达语句,将c语言程序转换为java程序。
127.在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:获取待处理c语言程序;对待处理c语言程序进行词法分析以得到待处理单词;对待处理单词进行语法分析以建立语法树;通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句。
128.在一个实施例中,计算机程序被处理器执行时所实现的对待处理c语言程序进行词法分析以得到待处理单词,包括:对待处理c语言程序进行预处理以删除无用符号;按照关键字识别规则对预处理后的待处理c语言程序进行识别以得到待处理单词。
129.在一个实施例中,计算机程序被处理器执行时所实现的对待处理单词进行语法分析以建立语法树,包括:将待处理单词进行重组得到语法单位;对语法单位进行连接得到语
法树。
130.在一个实施例中,计算机程序被处理器执行时所实现的对语法单位进行连接得到语法树之前,还包括:对语法单位进行形式检查以修正语法单位。
131.在一个实施例中,计算机程序被处理器执行时所实现的通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句,包括:通过深度优先遍历法对语法树进行遍历,以根据语法树中的关键词识别语法树中的不可达语句。
132.在一个实施例中,计算机程序被处理器执行时所实现的通过深度优先遍历法对语法树进行遍历,以根据语法树中的关键词识别语法树中的不可达语句,包括以下至少一种:通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在跳转关键词,若是,则将跳转关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在循环关键词,当存在循环关键词、循环关键词对应的循环条件恒成立,且循环关键词对应的循环体中不存在跳转关键词时,将循环关键词对应子树后的语句作为不可达语句;通过深度优先遍历法对语法树进行遍历,以判断语法树中是否存在分支关键词,当存在分支关键词,且分支关键词对应的分支中均存在有跳转关键词时,将分支关键词对应子树后的语句作为不可达语句。
133.在一个实施例中,计算机程序被处理器执行时所实现的通过深度优先遍历法对语法树进行遍历,以识别语法树中的不可达语句之后,包括:对不可达语句进行注释。
134.在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现以下步骤:根据上述任意一个实施例的c语言中不可达语句识别方法对c语言程序识别得到不可达语句;根据不可达语句,将c语言程序转换为java程序。
135.本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本技术所提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(read-only memory,rom)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(reram)、磁变存储器(magnetoresistive random access memory,mram)、铁电存储器(ferroelectric random access memory,fram)、相变存储器(phase change memory,pcm)、石墨烯存储器等。易失性存储器可包括随机存取存储器(random access memory,ram)或外部高速缓冲存储器等。作为说明而非局限,ram可以是多种形式,比如静态随机存取存储器(static random access memory,sram)或动态随机存取存储器(dynamic random access memory,dram)等。本技术所提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本技术所提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器等,不限于此。
136.以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
137.以上所述实施例仅表达了本技术的几种实施方式,其描述较为具体和详细,但并
不能因此而理解为对本技术专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本技术构思的前提下,还可以做出若干变形和改进,这些都属于本技术的保护范围。因此,本技术的保护范围应以所附权利要求为准。
再多了解一些

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

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

相关文献