软件源代码的验证方法及装置制造方法及图纸

技术编号:15704759 阅读:70 留言:0更新日期:2017-06-26 09:29
本发明专利技术提供一种软件源代码的验证方法及装置,方法包括:根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将文法单元编译为目标代码段;根据预设的专用公理集,获取文法单元对应的第一指称语义,获取目标代码段对应的第二指称语义;判断第一指称语义与第二指称语义是否一致;若第一指称语义与第二指称语义不一致,确定软件源代码存在错误。本发明专利技术解决了现有技术中当软件源代码存在错误,且当软件源代码的可执行代码的运行结果与预期结果一致时,无法发现软件源代码中的错误的问题。

【技术实现步骤摘要】
软件源代码的验证方法及装置
本专利技术涉及计算机
,尤其涉及一种软件源代码的验证方法及装置。
技术介绍
编译器是计算机系统的重要系统软件之一,所有采用高级语言编写的软件源代码都必须通过编译器的编译,生成计算机能够识别的可执行代码,因此保证编译器编译过程的准确性对于整个计算机系统而言至关重要。目前现有技术验证软件源代码准确性的主要手段是:编译器通过编译大量的软件源代码,生成可执行代码,然后运行生成的可执行代码,比较实际运行结果与预期结果是否一致来验证软件源代码的准确性。但是,这种检验软件源代码准确性的方法并不能保证软件源代码100%的正确率,软件源代码中存在的有些错误,可能并不会影响到编译后的可执行代码的运行结果,但是,这种软件源代码中所存在的错误会使软件存在漏洞,遭受网络黑客攻击的风险较高,影响到软件的安全性。因此,为保证软件的安全性,亟需一种有效地验证软件源代码,及时且准确发现软件源代码错误的方法。
技术实现思路
本专利技术提供一种软件源代码的验证方法及装置,以解决现有技术中当软件源代码存在错误,且当软件源代码的可执行代码行结果与预期结果一致时,无法发现软件源代码中的错误的问题。第一方面,本专利技术提供一种软件源代码的验证方法,包括:根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将所述文法单元编译为目标代码段;根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;判断所述第一指称语义与所述第二指称语义是否一致;若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。可选地,所述文法单元为循环结构文法单元或非循环结构文法单元;若所述文法单元为循环结构文法单元,相应的,所述判断所述第一指称语义与所述第二指称语义是否一致,包括:基于循环交互证明算法,所述判断所述第一指称语义与所述第二指称语义是否一致;若所述文法单元为非循环结构文法单元,相应的,所述判断所述第一指称语义与所述第二指称语义是否一致,包括:基于自动推理算法,比较所述第一指称语义与所述第二指称语义是否一致。可选地,所述判断所述第一指称语义与所述第二指称语义是否一致之后,所述方法还包括:若所述软件源代码中的每个文法单元的所述第一指称语义与所述第二指称语义均一致,确定所述软件源代码正确;将所述软件源代码中的每个文法单元所对应的目标代码段进行组合,得到所述软件源代码对应的目标代码。可选地,所述预设的下推自动机包含第一动作函数,所述第一动作函数包括状态调用接口和状态返回接口;所述状态调用接口用于跳转到所述下推自动机的第二动作函数;所述第二动作函数为所述状态调用接口对应的动作函数;所述状态返回接口用于从所述第二动作函数返回到所述第三动作函数;所述第三动作函数为位于所述第一动作函数之后的下一个动作函数;相应的,所述基于预设的下推自动机,对每个文法单元进行识别,包括:将所述预设的下推自动机的第一动作函数的字符与所述文法单元的的当前字符匹配;匹配成功后,根据所述第一动作函数状态函数的状态调用接口,跳转到所述第二动作函数,将所有第二动作函数的字符与所述当前文法单元相关联的子文法单元的所有字符进行匹配;匹配成功后,根据所述第一动作函数的状态返回接口返回所述第三动作函数,将所述第三动作函数的字符与所述文法单元的的当前字符的下一个字符进行匹配。可选地,所述方法还包括:当确定所述软件源代码存在错误之后,修正所述文法单元对应的软件源代码。第二方面,本专利技术提供一种软件源代码的验证装置,包括:划分模块,根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;识别模块,基于预设的下推自动机,对每个文法单元进行识别;编译模块,识别通过后,将所述文法单元编译为目标代码段;获取模块,根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;判断模块,判断所述第一指称语义与所述第二指称语义是否一致;第一确定模块,若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。可选地,所述文法单元为循环结构文法单元或非循环结构文法单元;所述判断模块,具体用于当所述文法单元为循环结构文法单元时,基于循环交互证明算法,所述判断所述第一指称语义与所述第二指称语义是否一致;或当所述文法单元为非循环结构文法单元时,基于自动推理算法,比较所述第一指称语义与所述第二指称语义是否一致。可选地,所述装置还包括:第二确定模块,用于所述判断模块判断所述第一指称语义与所述第二指称语义是否一致之后,若所述软件源代码中的每个文法单元的所述第一指称语义与所述第二指称语义均一致,确定所述软件源代码正确;组合模块,用于将所述软件源代码中的每个文法单元所对应的目标代码段进行组合,得到所述软件源代码对应的目标代码。可选地,所述预设的下推自动机包含第一动作函数,所述第一动作函数包括状态调用接口和状态返回接口;所述状态调用接口用于跳转到所述下推自动机的第二动作函数;所述第二动作函数为所述状态调用接口对应的动作函数;所述状态返回接口用于从所述第二动作函数返回到所述第三动作函数;所述第三动作函数为位于所述第一动作函数之后的下一个动作函数。所述识别模块,具体用于将所述预设的下推自动机的第一动作函数的字符与所述文法单元的的当前字符匹配;匹配成功后,根据所述第一动作函数状态函数的状态调用接口,跳转到所述第二动作函数,将所有第二动作函数的字符与所述当前文法单元相关联的子文法单元的所有字符进行匹配;匹配成功后,根据所述第一动作函数的状态返回接口返回所述第三动作函数,将所述第三动作函数的字符与所述文法单元的的当前字符的下一个字符进行匹配。可选地,所述装置还包括:修正模块,用于当确定所述软件源代码存在错误之后,修正所述文法单元对应的软件源代码。从本专利技术的实施例可知,本专利技术通过根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将所述文法单元编译为目标代码段;根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;判断所述第一指称语义与所述第二指称语义是否一致;若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。本专利技术解决了现有技术中当软件源代码存在错误,且当软件源代码的可执行代码的运行结果与预期结果一致时,无法发现软件源代码中的错误的问题。附图说明图1为一示例性实施例示出的一种软件源代码的验证方法的流程示意图;图2为另一示例性实施例示出的一种软件源代码的验证方法的流程示意图;图3为一示例性实施例示出的一种软件源代码的验证装置的结构示意图;图4为另一示例性实施例示出的一种软件源代码的验证装置的结构示意图。具体实施方式为使本专利技术实施例的目的、技术方案和优点更加清楚,下面将结合本专利技术实施例中的附图,对本专利技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本专利技术一部分实施例,而不是全部的实施例。基于本专利技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其本文档来自技高网...
软件源代码的验证方法及装置

【技术保护点】
一种软件源代码的验证方法,其特征在于,包括:根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将所述文法单元编译为目标代码段;根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;判断所述第一指称语义与所述第二指称语义是否一致;若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。

【技术特征摘要】
1.一种软件源代码的验证方法,其特征在于,包括:根据编程语言的语法规则,对软件源代码进行文法单元的划分,得到至少一个所述文法单元;基于预设的下推自动机,对每个文法单元进行识别;识别通过后,将所述文法单元编译为目标代码段;根据预设的专用公理集,获取所述文法单元对应的第一指称语义,获取所述目标代码段对应的第二指称语义;判断所述第一指称语义与所述第二指称语义是否一致;若所述第一指称语义与所述第二指称语义不一致,确定所述软件源代码存在错误。2.根据权利要求1所述的方法,其特征在于,所述文法单元为循环结构文法单元或非循环结构文法单元;若所述文法单元为循环结构文法单元,相应的,所述判断所述第一指称语义与所述第二指称语义是否一致,包括:基于循环交互证明算法,所述判断所述第一指称语义与所述第二指称语义是否一致;若所述文法单元为非循环结构文法单元,相应的,所述判断所述第一指称语义与所述第二指称语义是否一致,包括:基于自动推理算法,比较所述第一指称语义与所述第二指称语义是否一致。3.根据权利要求1所述的方法,其特征在于,所述判断所述第一指称语义与所述第二指称语义是否一致之后,还包括:若所述软件源代码中的每个文法单元的所述第一指称语义与所述第二指称语义均一致,确定所述软件源代码正确;将所述软件源代码中的每个文法单元所对应的目标代码段进行组合,得到所述软件源代码对应的目标代码。4.根据权利要求1所述的方法,其特征在于,所述预设的下推自动机包含第一动作函数,所述第一动作函数包括状态调用接口和状态返回接口;所述状态调用接口用于跳转到所述下推自动机的第二动作函数;所述第二动作函数为所述状态调用接口对应的动作函数;所述状态返回接口用于从所述第二动作函数返回到所述第三动作函数;所述第三动作函数为位于所述第一动作函数之后的下一个动作函数;相应的,所述基于预设的下推自动机,对每个文法单元进行识别,包括:将所述预设的下推自动机的第一动作函数的字符与所述文法单元的的当前字符匹配;匹配成功后,根据所述第一动作函数状态函数的状态调用接口,跳转到所述第二动作函数,将所有第二动作函数的字符与所述当前文法单元相关联的子文法单元的所有字符进行匹配;匹配成功后,根据所述第一动作函数的状态返回接口返回所述第三动作函数,将所述第三动作函数的字符与所述文法单元的的当前字符的下一个字符进行匹配。5.根据权利要求1所述的方法,其特征在于,还包括:当确定所述软件源代码存在错误之后,修正所述文法单元对应...

【专利技术属性】
技术研发人员:马殿富谭宇赵永望陈志伟刘克瑞
申请(专利权)人:北京航空航天大学
类型:发明
国别省市:北京,11

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

1