弹性的源代码语法树解析系统及方法

文档序号:8339514阅读:376来源:国知局
弹性的源代码语法树解析系统及方法
【技术领域】
[0001] 本发明涉及一种计算机测试技术,更具体的说,涉及一种有弹性的源代码解析系 统及方法。
【背景技术】
[0002] 在IT测试领域,白盒测试是一个非常重要的测试方法,它可以提供测试用例的编 写,可以进行测试完整性的评判,在这样的需求下,出现了很多自动化的测试工具,而这些 工具能够完成自动化的一个重要方面是实现源代码的语法树分析。
[0003] 还有很多领域需要将源代码的语法树分析作为基础工作,才能进行后续的过程处 理,例如通过源代码生成流程图,或者通过源代码进行项目逆向。
[0004] 目前,业界有很多源代码解析的方案,有些是手动方式,有些是通过正则表达式进 行解析,有些是借助编译器的分析结果进行解析。这些方案各有优缺。例如,手动方式虽然 灵活但工作量具体,只能适用于比较简单的语法规则。正则表达式具有表达简洁的优势,但 对于某些错误却非常难处理。借助编译器的方式最大的优势是解析结果非常精确,也非常 丰富,但要求设置却也相对较多,不适用于轻量级应用。

【发明内容】

[0005] 本发明针对上述现有技术中存在的技术问题,提供一种弹性的源代码语法树分析 系统及方法,满足不同精细程度的源代码解析需求,它能够根据调用时给出信息的丰富程 度,自动对解析结果进行精细粒度调节,对于能够精细的部分采用细粒度表达,对于信息不 充分部分米用粗粒度表达。
[0006] 为达到上述目的,本发明所采用的技术方案如下:
[0007] -种弹性的源代码语法树解析系统,包括源代码预处理模块、编译器解析模块、编 译器解析结果分析模块、二次手动解析模块,所述源代码预处理模块,根据用户的输入对源 代码进行预处理;所述编译器解析模块,通过编译器对经过预处理的源代码进行分析,生成 编译器支持的分析结果;所述编译器解析结果分析模块,通过对编译器解析的结果进行分 析,确定源代码中被精细表达的部分、不能被编译器识别的部分以及被解析不完整的部分; 所述二次手动解析模块,对编译器识别不完整的部分进行解析修正,对编译器不能解析的 部分进行手动解析。
[0008] 所述编译器解析结果分析模块包括源代码字元化模块和解析结果分析对比模块。
[0009] 一种弹性的源代码语法树解析方法,采用上述的系统来完成,包括步骤如下:
[0010] 第一步,通过源代码预处理模块对源代码进行预处理;
[0011] 第二步,通过编译器解析模块对源代码进行解析;
[0012] 第三步,通过编译器解析结果分析模块对解析结果进行分析定位;
[0013] 第四步,通过二次手动解析模块将源代码进行完整解析。
[0014] 所述第二步对源代码进行解析的方法是:对编译器进行流程更改,让其对经过预 处理的源代码进行分析,生成统一形式的源代码语法树结构信息。
[0015] 所述第三步对解析结果进行分析定位的方法是:按照源代码的语法规范,将源代 码进行字元化,然后通过与生成的语法树结构信息进行对比,找出其中没有被编译器识别 出的代码部分,进行标记。
[0016] 所述第四步将源代码进行完整解析的方法是:根据源代码的语法规范,首先将源 代码进行字元化,然后根据字元信息进行语句级别的解析,再生成编译器支持的分析结果。
[0017] 本发明技术方案的有益效果如下:
[0018] 有些场景需要对源代码的结构了解到非常细节,有些场景对源代码结构并不需要 太细节,例如通过源代码生成流程图的应用,只需要语句级别的解析就可以了,并且这类应 用往往输入是一个片段代码,本身输入就决定了不可能做到非常细节的语法树结构解析。 本发明因为在解析结果上有非常好的弹性,可以应用在对解析细节要求很好的场景,例如 源代码插粧等,也可以应用到类似源代码转换为流程图的应用中,源代码逆向工程等项目 中。
【附图说明】
[0019] 通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、 目的和优点将会变得更明显:
[0020] 图1是本发明一实施例的系统组成框图;
[0021 ] 图2是本发明的方法流程图。
【具体实施方式】
[0022] 下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术 人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术 人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进。这些都属于本发明 的保护范围。
[0023] 图1所示,本发明所提供的系统,包括源代码预处理、编译器解析、编译器解析结 果分析、二次手动解析四个模块。
[0024] 源代码预处理模块,它根据用户的输入对源代码进行预处理,对源代码中的宏等 进行处理。通过源代码编译器对源代码执行预处理命令,例如GCC-E test, cpp。
[0025] 编译器解析模块,利用了现有的成熟得编译器GCC、Clang,对编译器进行流程更 改,让它对经过预处理的源代码进行分析,生成统一形式的源代码语法树信息。
[0026] 编译器解析结果分析模块,分为了两个部分,一个是源代码字元化模块,另一个是 解析结果分析对比模块,首先通过字元化,对编译器解析的结果进行分析,确定源代码中可 以被精细表达的部分,不能被编译器识别的部分,以及被解析不完整的部分。
[0027] 二次手动解析模块,它对编译器识别不完整部分进行解析修正,对编译器不能解 析的部分进行手动解析。
[0028] 图2所示,本发明涉及的具有弹性的源代码解析方法步骤如下:
[0029] 首先对源代码进行预处理;
[0030] 然后通过编译器或解析器对源代码进行解析;
[0031] 在然后对解析结果进行分析定位;
[0032] 最后通过二次补充解析将源代码进行完整解析。
[0033] 为了能够更好的说明上述步骤以及效果,以下举例说明,该实施例有以下源代 码:
【主权项】
1. 一种弹性的源代码语法树解析系统,其特征在于,包括源代码预处理模块、编译器解 析模块、编译器解析结果分析模块、二次手动解析模块,所述源代码预处理模块,根据用户 的输入对源代码进行预处理;所述编译器解析模块,通过编译器对经过预处理的源代码进 行分析,生成编译器支持的分析结果;所述编译器解析结果分析模块,通过对编译器解析的 结果进行分析,确定源代码中被精细表达的部分、不能被编译器识别的部分以及被解析不 完整的部分;所述二次手动解析模块,对编译器识别不完整的部分进行解析修正,对编译器 不能解析的部分进行手动解析。
2. 根据权利要求1所述的弹性的源代码语法树解析系统,其特征在于,所述编译器解 析结果分析模块包括源代码字元化模块和解析结果分析对比模块。
3. -种弹性的源代码语法树解析方法,其特征在于,采用如权利要求1或2所述的系统 来完成,包括步骤如下: 第一步,通过源代码预处理模块对源代码进行预处理; 第二步,通过编译器解析模块对源代码进行解析; 第三步,通过编译器解析结果分析模块对解析结果进行分析定位; 第四步,通过二次手动解析模块将源代码进行完整解析。
4. 根据权利要求3所述的弹性的源代码语法树解析方法,其特征在于,所述第二步对 源代码进行解析的方法是:对编译器进行流程更改,让其对经过预处理的源代码进行分析, 生成统一形式的源代码语法树结构信息。
5. 根据权利要求4所述的弹性的源代码语法树解析方法,其特征在于,所述第三步对 解析结果进行分析定位的方法是:按照源代码的语法规范,将源代码进行字元化,然后通过 与生成的语法树结构信息进行对比,找出其中没有被编译器识别出的代码部分,进行标记。
6. 根据权利要求5所述的弹性的源代码语法树解析方法,其特征在于,所述第四步将 源代码进行完整解析的方法是:根据源代码的语法规范,首先将源代码进行字元化,然后根 据字元信息进行语句级别的解析,再生成编译器支持的分析结果。
【专利摘要】本发明公开一种弹性的源代码语法树解析系统及方法,包括源代码预处理模块、编译器解析模块、编译器解析结果分析模块、二次手动解析模块,所述源代码预处理模块,根据用户的输入对源代码进行预处理;所述编译器解析模块,通过编译器对经过预处理的源代码进行分析,生成编译器支持的分析结果;所述编译器解析结果分析模块,通过对编译器解析的结果进行分析,确定源代码中被精细表达的部分、不能被编译器识别的部分以及被解析不完整的部分;所述二次手动解析模块,对编译器识别不完整的部分进行解析修正,对编译器不能解析的部分进行手动解析。本发明满足不同精细程度的源代码解析需求,自动对解析结果进行精细粒度调节。
【IPC分类】G06F11-36
【公开号】CN104657267
【申请号】CN201510070573
【发明人】杨波波, 秦炜, 徐曙清
【申请人】上海创景计算机系统有限公司
【公开日】2015年5月27日
【申请日】2015年2月10日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1