(10)申请公布号 CN 103645986 A (43)申请公布日 2014.03.19 CN 103645986 A (21)申请号 201310629025.3 (22)申请日 2013.11.29 G06F 11/36(2006.01) G06F 9/45(2006.01) G06F 17/27(2006.01) (71)申请人 北京广利核系统工程有限公司 地址 100094 北京市海淀区永丰路 5 号院 5 号楼 100094 申请人 中国广核集团有限公司 (72)发明人 刘陈虎 周涛 黄太新 刘红刚 冀建伟 (74)专利代理机构 北京元中知识产权代理有限 责任公司 11223 代理人 王明霞 (54) 发明名称 一种编译器的可视化语法树的生成方法和重 构方法 (57) 摘要 本发明涉及一种编译器的可视化语法树的生 成方法和重构方法, 其中, 该生成方法包括 : 步骤 (1) , 解析编译器语义分析??榻邮盏降挠锓ㄊ?, 确定语法树的节点信息, 节点信息至少包括 : 节 点类型名、 节点位置、 以及节点属性值 ; 步骤 (2) , 翻译节点属性值, 得到相应的节点属性信息, 并为 语法树中每个节点的节点类型名添加头部标识, 得到节点名称, 其中, 头部标识用于为每个节点提 供唯一标识 ; 步骤 (3) , 根据节点名称、 以及节点 位置, 应用预定节点排列算法, 对语法树的多个节 点进行组织, 得到语法树的语法树层级结构, 并在 语法树层级结构中, 关联上节点属性信息 ; 步骤 (4) , 整理树形层级结构, 生成可视化语法树 ; 步 骤 (5) , 存储可视化语法树。 (51)Int.Cl. 权利要求书 2 页 说明书 11 页 附图 5 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书11页 附图5页 (10)申请公布号 CN 103645986 A CN 103645986 A 1/2 页 2 1. 一种编译器的可视化语法树的生成方法, 其特征在于, 包括 : 步骤 (1) , 解析编译器语义分析??榻邮盏降挠锓ㄊ?, 确定所述语法树的节点信息, 所 述节点信息至少包括 : 节点类型名、 节点位置、 以及节点属性值 ; 步骤 (2) , 翻译所述节点属性值, 得到相应的节点属性信息, 并为所述语法树中每个节 点的节点类型名添加头部标识, 得到节点名称, 其中, 所述头部标识用于为每个节点提供唯 一标识 ; 步骤 (3) , 根据所述节点名称、 以及节点位置, 应用预定节点排列算法, 对所述语法树的 多个节点进行组织, 得到所述语法树的语法树层级结构, 并在所述语法树层级结构中, 关联 上所述节点属性信息 ; 步骤 (4) , 整理所述树形层级结构, 生成可视化语法树 ; 步骤 (5) , 存储所述可视化语法树。 2. 根据权利要求 1 所述的生成方法, 其特征在于, 所述步骤 (1) 中, 所述节点位置的确 定方式包括 : 通过遍历算法, 收集所述语法树中每个节点的父节点、 子节点、 或者兄弟节点的信息, 并根据所述信息, 推算出该节点在所述语法树中的相对位置。 3. 根据权利要求 1 所述的生成方法, 其特征在于, 所述步骤 (2) 中, 翻译所述节点属性 值, 得到相应的节点属性信息包括 : 根据语言参考手册、 或者设计文档, 翻译所关注的节点属性值, 得到相应的节点属性信 息。 4. 根据权利要求 1 所述的生成方法, 其特征在于, 所述节点属性信息的确定方式包括 : 根据预先存储的节点属性值与节点属性含义的对应关系, 确定节点的节点属性信息, 其中, 所述节点属性信息包括节点属性含义。 5. 根据权利要求 1 所述的生成方法, 其特征在于, 所述步骤 (2) 中, 在为所述语法树中 每个节点的节点类型名添加头部标识之前, 将所述节点类型名中的公共部分用指定字符代 替。 6. 根据权利要求 1 所述的生成方法, 其特征在于, 所述步骤 (3) 中, 所述预定节点排列 算法包括 : 依据节点的相对位置关系, 为每个节点设计存储路径, 在所述存储路径下为每个节点 创建文件夹, 文件夹名称以节点名称命名, 应用 WINDOS 批处理的 TREE 命令, 生成树型层级 结构 ; 并且, 在所述语法树层级结构中, 关联上所述节点属性信息之前, 将所述语法树层级结构中 节点名称中的头部标识去除。 7. 根据权利要求 1 所述的生成方法, 其特征在于, 所述步骤 (4) 中, 整理所述树形层级 结构包括 : 将所述树形层级结构、 以及所述树形层级结构所关联的节点属性信息拷贝至 EXCEL 文 档中, 并在指定位置添加标题, 并根据预定规则, 设置所述EXCEL文档中内容的颜色、 和/或 格式。 8.一种基于权利要求1至7中任一项所述的编译器的可视化语法树的生成方法生成的 可视化语法树的重构方法, 其特征在于, 包括 : 权 利 要 求 书 CN 103645986 A 2 2/2 页 3 步骤 a. 根据编译器语义分析??榻邮盏降挠锓ㄊ?, 生成可视化语法树 ; 步骤 b. 读取所述可视化语法树的节点信息, 并根据接收到的修改指令对所述语法树 的节点信息进行修改, 得到修改后的语法树的节点信息, 其中, 所述节点信息至少包括 : 节 点名称、 节点位置、 以及节点属性值 ; 步骤 c. 判断所述修改后的语法树的节点信息与修改前的所述可视化语法树的节点 信息中是否存在区别信息, 在所述判断结果为是的情况下, 对所述区别信息进行标记并存 储 ; 步骤 d. 根据所述修改后的语法树的节点信息, 重构语法树。 9.根据权利要求8所述的重构方法, 其特征在于, 所述步骤b中对节点信息进行修改的 方式包括以下至少之一 : 修改所述语法树中节点的节点属性值、 修改所述语法树中节点的节点位置、 增加节点、 删除节点。 10. 根据权利要求 9 所述的重构方法, 其特征在于, 所述修改所述语法树中节点的节点 位置包括以下至少之一 : 修改所述语法树中节点所在层级、 修改所述语法树中节点所在层级中的相对位置。 权 利 要 求 书 CN 103645986 A 3 1/11 页 4 一种编译器的可视化语法树的生成方法和重构方法 技术领域 [0001] 本发明涉及计算机领域, 并且特别地, 设计一种编译器的可视化语法树的生成方 法和生成装置。 背景技术 [0002] 在当前的计算机领域, 应用高级语言编译器能够实现将程序语言转化为机器语言 的操作, 但是, 如果编译器设计中存在错误, 可能会造成原始程序转化成的计算机语言与程 序设计者的初衷不一致, 而这种错误在编译器发布后很难检测和纠正, 因此, 对编译器的测 试显得至关重要。 [0003] 在现有技术中, 编译器的设计主要由词法语法分析、 和语义分析等??楣钩?, 其中 词法语法分析部分多采用 flex&bison 工具来完成, 已较为成熟, 而语义分析部分是编译器 设计的核心, 所以, 对语义分析的测试也是编译器测试的重点, 但是, 语义分析作为编译器 实现过程中的一个中间???, 其实现过程、 ??槭淙胍约坝锓ㄊ鹘峁雇哂幸欢ǖ牟煌?明性, 这就为测试带来了困难。 [0004] 语义分析测试的重点在于测试对语法树节点的分析过程, 语义分析过程大致为 : 收集词法语法分析后产生的语法树节点信息, 分析节点信息中属性信息的各项数据, 检查 语义的符合程度, 如果有错误产生, 报告相应的错误码和错误信息。 语义分析??榈氖淙胛?语法树, 而测试时, 测试人员所编写的待测试源代码, 是通过 flex&bison 工具来生成语法 树的, 测试人员实际上对所生成语法树的结构并不了解, 也就无法真正了解语义分析???的输入。 [0005] 目前语义分析的测试方法主要有两种 : [0006] (方法一) 采用类似于黑盒测试的方法, 根据语言参考手册, 错误码等进行测试, 以 及一定的随机测试。 [0007] (方法二) 在第一种方法的基础上, 采用类似白盒测试的方式在代码中对某些节点 信息进行监视来辅助测试。 [0008] 以同步数据流编程语言 LUSTRE 语言为例, LUSTRE 语言总共有 51 种待分析的节 点, 一段简单的 LUSTRE 代码, 节点数量都有数百个之多, 如果采用类似黑盒测试的方式, 按 照错误码进行测试或随机编写代码测试, 很难保证测到分析过程每个节点的分析情况, 容 易遗漏某些分支, 而由于无法透明的了解分析过程, 测试人员对这些遗漏的内容往往一无 所知。另外, 基于错误码的测试过程中, 某些错误码可能对应多种类型的语义错误, 测试人 员有时可能只测试到了其中一两个, 就认为某个错误码的测试通过了, 而其中所覆盖的语 义错误类型, 可能并不全面, 这种原因造成的测试不全面, 测试人员同样无法了解和统计, 这些都容易使测试产生风险, 给产品质量带来隐患。 [0009] 另外一种监视节点信息的测试方式中, 采用对源代码进行单步调试的方式, 通过 使用指针一级一级的追踪, 来得到某个节点的属性信息。这种方法虽然可以直接了解到语 法树的属性信息, 但每次只能观测一个节点, 而语义分析过程中节点众多, 如果了解更多节 说 明 书 CN 103645986 A 4 2/11 页 5 点需要设置多个监视器, 人为地在监视器中构造复杂的多级指针来观测节点信息, 费时费 力, 并且, 所监视到的属性值为原始数据值, 需要不断查阅设计文档和数据结构资料或者语 言参考手册才能将其翻译成可供测试人员了解的属性含义, 并且这种方式只能了解单个属 性值, 无法了解节点与节点之间的相对关系, 无法明确得知节点在整个语法树中所处的位 置, 从而无法确定整体的树形结构, 所以, 使节点的信息透明化, 仍然存在很大的局限性, 因 此采用这种方式, 虽然能真实观测到节点的属性值信息, 但由于存在多种局限, 实际上很难 实现。 [0010] 鉴于此提出本发明。 发明内容 [0011] 本发明的目的为克服现有技术的不足, 提供一种编译器的可视化语法树的生成方 法和重构方法。 [0012] 为了实现该目的, 本发明采用如下技术方案 : [0013] 根据本发明的一个方面, 提供了一种编译器的可视化语法树的生成方法, 该生成 方法包括 : [0014] 步骤 (1) , 解析编译器语义分析??榻邮盏降挠锓ㄊ?, 确定语法树的节点信息, 节 点信息至少包括 : 节点类型名、 节点位置、 以及节点属性值 ; [0015] 步骤 (2) , 翻译节点属性值, 得到相应的节点属性信息, 并为语法树中每个节点的 节点类型名添加头部标识, 得到节点名称, 其中, 头部标识用于为每个节点提供唯一标识 ; [0016] 步骤 (3) , 根据节点名称、 以及节点位置, 应用预定节点排列算法, 对语法树的多个 节点进行组织, 得到语法树的语法树层级结构, 并在语法树层级结构中, 关联上节点属性信 息 ; [0017] 步骤 (4) , 整理树形层级结构, 生成可视化语法树 ; [0018] 步骤 (5) , 存储可视化语法树。 [0019] 其中, 节点位置的确定方式包括 : [0020] 通过遍历算法, 收集语法树中每个节点的父节点、 子节点、 或者兄弟节点的信息, 并根据信息, 推算出该节点在语法树中的相对位置。 [0021] 并且, 翻译节点属性值, 得到相应的节点属性信息包括 : [0022] 根据语言参考手册、 或者设计文档, 翻译所关注的节点属性值, 得到相应的节点属 性信息。 [0023] 此外, 节点属性信息的确定方式包括 : [0024] 根据预先存储的节点属性值与节点属性含义的对应关系, 确定节点的节点属性信 息, 其中, 所述节点属性信息包括节点属性含义。 [0025] 并且, 在为语法树中每个节点的节点类型名添加头部标识之前, 将节点类型名中 的公共部分用指定字符代替。 [0026] 优选地, 预定节点排列算法包括 : [0027] 依据节点的相对位置关系, 为每个节点设计存储路径, 在所述存储路径下为每个 节点创建文件夹, 文件夹名称以节点名称命名, 应用 WINDOS 批处理的 TREE 命令, 生成树型 层级结构 ; 并且, 说 明 书 CN 103645986 A 5 3/11 页 6 [0028] 在语法树层级结构中, 关联上节点属性信息之前, 将语法树层级结构中节点名称 中的头部标识去除。 [0029] 并且, 整理树形层级结构包括 : [0030] 将树形层级结构、 以及树形层级结构所关联的节点属性信息拷贝至 EXCEL 文档 中, 并在指定位置添加标题, 并根据预定规则, 设置 EXCEL 文档中内容的颜色、 和 / 或格式。 [0031] 根据本发明的另一方面, 还提供了一种基于上述的编译器的可视化语法树的生成 方法生成的可视化语法树的重构方法, 该方法包括 : [0032] 步骤 a. 根据编译器语义分析??榻邮盏降挠锓ㄊ?, 生成可视化语法树 ; [0033] 步骤 b. 读取可视化语法树的节点信息, 并根据接收到的修改指令对语法树的节 点信息进行修改, 得到修改后的语法树的节点信息, 其中, 节点信息至少包括 : 节点名称、 节 点位置、 以及节点属性值 ; [0034] 步骤 c. 判断修改后的语法树的节点信息与修改前的可视化语法树的节点信息中 是否存在区别信息, 在判断结果为是的情况下, 对区别信息进行标记并存储 ; [0035] 步骤 d. 根据修改后的语法树的节点信息, 重构语法树。 [0036] 其中, 对节点信息进行修改的方式包括以下至少之一 : [0037] 修改语法树中节点的节点属性值、 修改语法树中节点的节点位置、 增加节点、 删除 节点。 [0038] 并且, 修改语法树中节点的节点位置包括以下至少之一 : [0039] 修改语法树中节点所在层级、 修改语法树中节点所在层级中的相对位置。 [0040] 采用本发明所述的技术方案后, 带来以下有益效果 : [0041] 通过解析编译器语义分析??榻邮盏降挠锓ㄊ?, 获取该语法树的节点信息, 并根 据节点信息, 以预定方式, 对该语法树中的节点进行组织, 得到该语法树的语法树层级结 构, 并整理该语法树层级结构, 生成可视化语法树, 使用户可以直观了解到编译器语义分析 ??榈氖淙?, 从而, 方便设计测试用例, 提高语义分析测试的覆盖率, 进而提高测试质量。 [0042] 下面结合附图对本发明的具体实施方式作进一步详细的描述。 附图说明 [0043] 图 1 : 根据本发明实施例的编译器的可视化语法树的生成方法流程图 ; [0044] 图 2 : 根据本发明实施例的编译器的可视化语法树的重构方法流程图 ; [0045] 图 3 : 结合编译器的可视化语法树的生成方法完成语义分析测试的整体实现过程 示意图 ; [0046] 图 4 : 结合本发明实施例的编译器的可视化语法树的生成方法以及编译器的可视 化语法树的重构方法完成语义分析测试的整体流程示意图 ; [0047] 图 5 : 根据本发明一个实施例所列举的一段 LUSTRE 语言代码示意图 ; [0048] 图 6 : 根据本发明一个实施例的编译器的可视化语法树的生成方法流程图 ; [0049] 图 7 : 根据本发明一个实施例的 acg_tree_info.txt 文件内容示意图 ; [0050] 图 8 : 根据本发明一个实施例的可视化语法树的重构方法流程图 ; [0051] 图 9 : 根据本发明一个实施例的 modify_tree_attr.txt 文件内容示意图 ; [0052] 图 10 : 根据本发明一个实施例的 modify_info.txt 文件内容示意图。 说 明 书 CN 103645986 A 6 4/11 页 7 具体实施方式 [0053] 根据本发明的实施例, 提供了一种编译器的可视化语法树的生成方法。 [0054] 如图 1 所示, 该生成方法包括 : [0055] 步骤 S101, 解析编译器语义分析??榻邮盏降挠锓ㄊ?, 确定语法树的节点信息, 节 点信息至少包括 : 节点类型名、 节点位置、 以及节点属性值 ; [0056] 步骤 S103, 翻译节点属性值, 得到相应的节点属性信息, 并为语法树中每个节点的 节点类型名添加头部标识, 得到节点名称, 其中, 头部标识用于为每个节点提供唯一标识 ; [0057] 通过翻译节点属性值, 可以将语法树属性值翻译成测试人员容易理解的属性含 义, 而不是仅仅看到一个个数值。 [0058] 步骤 S105, 根据节点名称、 以及节点位置, 应用预定节点排列算法, 对语法树的多 个节点进行组织, 得到语法树的语法树层级结构, 并在语法树层级结构中, 关联上节点属性 信息 ; [0059] 步骤 S107, 整理树形层级结构, 生成可视化语法树 ; [0060] 步骤 S109, 存储可视化语法树。 [0061] 其中, 节点位置的确定方式包括 : [0062] 通过遍历算法, 收集语法树中每个节点的父节点、 子节点、 或者兄弟节点的信息, 并根据信息, 推算出该节点在语法树中的相对位置。 [0063] 此外, 在一个实施例中, 还可以通过遍历算法, 收集语法树中每个节点的行号信 息, 并显示在该语法树中, 从而, 可以方便用户快速准确确定每个节点的位置。 [0064] 此外, 翻译节点属性值, 得到相应的节点属性信息包括 : [0065] 根据语言参考手册、 或者设计文档, 翻译所关注的节点属性值, 得到相应的节点属 性信息。 [0066] 并且, 节点属性信息的确定方式包括 : [0067] 根据预先存储的节点属性值与节点属性含义的对应关系, 确定节点的节点属性信 息, 其中, 所述节点属性信息包括节点属性含义。 [0068] 并且, 在确定节点属性信息的过程中, 还可以进一步确定与每一个节点的节点属 性信息相对应的属性解释, 同时, 也将该属性解释关联至语法树层级结构中, 方便用户阅读 和理解。 [0069] 此外, 在为语法树中每个节点的节点类型名添加头部标识之前, 将节点类型名中 的公共部分用指定字符代替。 [0070] 例如, 在一个实施例中, 语法树中所有节点的类型名中均包含 “TREENODE_TYPE” 的 字符串, 则在为每个节点的节点类型名添加头部标识前, 先将 “TREENODE_TYPE” 用字符 “@” 代替, 从而, 使最终生成的语法树界面更加清晰、 简洁, 并且, 由于对语法树中字符长度进行 了一定程度的简化, 使生成语法树所用的时间等资源也在一定程度上得以节约。 [0071] 优选地, 预定节点排列算法包括 : [0072] 依据节点的相对位置关系, 为每个节点设计存储路径, 在所述存储路径下为每个 节点创建文件夹, 文件夹名称以节点名称命名, 应用 WINDOS 批处理的 TREE 命令, 生成树型 层级结构 ; 并且, 说 明 书 CN 103645986 A 7 5/11 页 8 [0073] 在语法树层级结构中, 关联上节点属性信息之前, 将语法树层级结构中节点名称 中的头部标识去除。 [0074] 将语法树层级结构中节点名称中的头部标识去除, 可以使最终生成的语法树界面 更加直观、 简洁, 方便用户阅读。 [0075] 此外, 整理树形层级结构包括 : [0076] 将树形层级结构、 以及树形层级结构所关联的节点属性信息拷贝至 EXCEL 文档 中, 并在指定位置添加标题, 并根据预定规则, 设置 EXCEL 文档中内容的颜色、 和 / 或格式。 [0077] 根据本发明的实施例, 还提供了一种基于上述编译器的可视化语法树的生成方法 生成的可视化语法树的重构方法。如图 2 所示, 该重构方法包括 : [0078] 步骤 S201, 根据编译器语义分析??榻邮盏降挠锓ㄊ?, 生成可视化语法树 ; [0079] 步骤 S203, 读取可视化语法树的节点信息, 并根据接收到的修改指令对语法树的 节点信息进行修改, 得到修改后的语法树的节点信息, 其中, 节点信息至少包括 : 节点名称、 节点位置、 以及节点属性值 ; [0080] 步骤 S205, 判断修改后的语法树的节点信息与修改前的可视化语法树的节点信息 中是否存在区别信息, 在判断结果为是的情况下, 对区别信息进行标记并存储 ; [0081] 步骤 S207, 根据修改后的语法树的节点信息, 重构语法树。 [0082] 其中, 对节点信息进行修改的方式包括以下至少之一 : [0083] 修改语法树中节点的节点属性值、 修改语法树中节点的节点位置、 增加节点、 删除 节点。 [0084] 并且, 修改语法树中节点的节点位置包括以下至少之一 : [0085] 修改语法树中节点所在层级、 修改语法树中节点所在层级中的相对位置。 [0086] 例如以下具体实施例, 根据本发明的技术方案提供了一种编译器的可视化语法树 的生成方法, 主要使用 C 语言、 VBS 脚本语言, 以及批处理脚本完成, 在 windows XP 操作系 统环境下, 使用 Visual Studio2010 编写 C 语言代码, 并生成可执行文件, 可将待测试源代 码对应的语法树, 在短时间内自动以图形的方式显示出来, 自动生成语法树结构图、 行号信 息、 属性值、 属性含义注释、 以及节点之间的层级关系等信息, 从而让测试人员能清晰的看 到语义分析??榈氖淙?, 帮助了解语义分析的过程和细节, 为测试设计提供参考, 提高测试 的质量和测试深度, 并且支持对语法树结构进行修改, 可帮助构造各类正常、 或者异常功能 测试, 图 3 为结合该生成方法完成语义分析测试的整体实现过程示意图, 结合编译器的可 视化语法树的生成方法和重构方法完成在语义分析测试的整体流程图如图 4 所示。 [0087] 本方法的可以通过编写计算机程序的方式实现, 具体实现过程如下两个部分 : [0088] (部分一) 本部分程序嵌入到编译器开发工程中, 和语义分析部分的输入接口相结 合, 用于解析 flex&bison 生成的语法树结构, 并将这些已解析的信息按照一定的格式存储 于临时文件中 ; [0089] (部分二) 本部分程序用于将已读出的语法树信息进行组织和整理, 形成可视化树 形结构, 其中, 本部分程序被封装成可执行文件, 使用过程中, 调试编译器工程, 单步运行到 语义分析??槿肟?, 运行可视化语法树生成工具, 便可通过生成的文档, 直观的看到语法树 信息, VBS 脚本和批处理脚本用于中间过程处理、 格式整理、 文档生成等, 此外, 在产生可视 化语法树的基础上, 增加识别节点修改内容的逻辑, 构成 “生成修改后语法树” 的可执行文 说 明 书 CN 103645986 A 8 6/11 页 9 件, 可用于重构修改后的语法树。 [0090] 第一部分程序的实现细节, 可根据不同编译器语法树节点信息的不同, 进行定制, 适当修改节点类型名和属性读取部分的内容, 程序主体框架无需修改。下面将以同步数据 流编程语言——LUSTRE 语言为例, 对于如图 5 所示的一段 LUSTRE 代码, 该方法的实现过程 进行详细描述 : [0091] 一 . 生成可视化语法树 : [0092] 本步骤的目的在于将待测试源代码对应的语法树, 以可视化的形式展现出来, 并 显示语法树节点信息和层级关系。 [0093] 生成可视化语法树的实现过程被封装成一个可执行文件, 操作的输入文件是待测 试的 LUSTRE 源代码, 可执行文件在执行过程中总共包含了 5 个处理过程, 如图 6 所示 : [0094] 步骤 S601, 收集节点信息 ; [0095] 在本步骤中, 完成收集节点信息的工作。将第一部分程序嵌入到 LUSTRE 语言编译 器中, 读取由 flex&bison 生成的语法树, 通过对树结构的遍历算法, 得到每个节点的详细 信息, 并通过分析每个节点的父节点, 子节点, 兄弟节点的信息推算出节点在语法树中的相 对位置, 将收集到的语法树信息整理, 生成两个临时文件 : acg_tree_info.txt 和 lustre_ file_path.txt, 其中, [0096] acg_tree_info.txt 用于记录所有节点信息, 该节点信息包括但不限于节点类型 名称、 相对位置、 属性值, 其中, 不同的节点信息, 可以用不同的方式表示, 例如 : 在一个实施 例中, 如图 7 所示, 用 “@” 符号作为分隔符,“@” 符号之前的字符串代表节点类型,“@” 符号 后面的用数字串表示节点在语法树中的相对位置 (比如 : 用 1 表示第 1 个节点, 11132 代表 第 1 个节点的第 1 个子节点的第 1 个子节点的第 3 个子节点的第 2 个子节点, 以此类推) , 数字串后面用指定符号 (比如 :“###” 符号) 表示该节点的属性, 在 “###” 符号后面为属性 值, 并且, 根据预定规则, 对于不同的类型的属性, 存放在不同的位置, 例如 : 数字串后面有 四个 “###” 符号, 分别代表了该节点的四个属性, 其中, 前三处为通用属性, 最后一处为节点 属性, 最后一个 “###” 后可能有 “*^* ~~ *^* ~~ .” 结构, 代表此节点属性的分属性, “*^* ~~ *^* ~~ .” 后面可能还对应 “_#_ ~~ _#_ ~~ .” 结构, 代表分属性的分属 性, 此外, 如果属性值为空, 则记录为 “” ; [0097] 例如, 在一个实施例中, acg_tree_info.txt 文件中记录的一部分内容为 : [0098]
[email protected]###4###0######*^*Output2*^**^*0*^*0 [0099] 则, 该节点的节点类型名为 “TREENODE_TYPE_VAR_ID” , 节点在语法树中相对位置 为第 1 个节点的第 1 个子节点的第 1 个子节点的第 3 个子节点的第 2 个子节点的第 1 个子 节点, 该节点的第一个属性值为 “4” , 第二个属性值为 “0” , 第三个属性值为空, 第四个属性 值的第一个分属性为 “Output2” , 第四个属性值的第二个分属性为空, 第三个和第四个分属 性值为 “0” 。 [0100] lustre_file_path.txt 用于记录待测试的 LUSTRE 源代码在本地计算机中的存放 路径。 [0101] 步骤 S603, 翻译节点信息 ; [0102] 在本步骤中, 对步骤 S501 中获得的语法树节点属性信息进行翻译。依据语言参考 说 明 书 CN 103645986 A 9 7/11 页 10 手册, 将每个节点的属性逐一解释, 便于测试人员能直观了解属性含义, 而不是看到一个个 数值, 另外, 整理语法树节点类型的名称, 使节点类型名尽可能简洁, 并为节点类型名加头 部标识, 保证其唯一性, 通过简化的节点类型名和唯一的头部标识构成节点名称, 为生成树 形结构做准备。此过程中仍然生成两个临时文件 : create_attr.txt 和 create_path.txt, 其中, [0103] create_attr.txt 用于记录已经翻译的节点信息。记录内容分别为 : 该节点对应 的 LUSTRE 源代码的行号、 节点的属性值、 测试过程中所关注的属性以及对属性值的解释 ; [0104] create_path.txt 用于记录所创建的节点路径的名称, 依据节点位置信息, 为生成 层级结构做准备。 [0105] 步骤 S605, 整理树形层级结构 [0106] 在本步骤中, 依据上一步骤中收集到的节点名称和位置关系的信息, 依据节点的 相对位置关系, 为每个节点设计存储路径, 在所述存储路径下为每个节点创建文件夹, 文件 夹名称以节点名称命名, 应用 WINDOS 批处理的 TREE 命令, 生成树型层级关系, 完成树型结 构的整理, 此过程产生三个临时文件 : tree_tmp.txt、 tree.txt、 和 all_tree_info.txt, 其 中, [0107] tree_tmp.txt 用于记录临时树形节点的层级关系, 该树形层级结关系中, 每个文 件夹名称以节点名称命名, 且, 每个节点名称均带有用于表示其唯一性的头部标识 ; [0108] tree.txt 用于整理 tree_tmp.txt 文件, 将每个节点名称中的头部标识去除, 形成 并存储最终的树形层级关系, 从而使最终的树形层级关系更加简洁、 直观 ; [0109] all_tree_info.txt 用于在语法树层级结构中, 关联上每个节点的所有属性信息。 [0110] 步骤 S607, 整理树形格式 [0111] 在本步骤中, 整理树形结构, 使用脚本将临时文件 all_tree_info.txt 中包含的 所有节点层级关系信息和属性信息拷贝到新建的 EXCEL 文档中, 在第一行中添加相应的标 题, 并整理 EXCEL 中数据的颜色和格式, 使整个语法树更易观察, 此过程生成文件 : 可视化 语法树 .xlsx。 [0112] 步骤 S609, 生成可视化语法树 [0113] 待可视化语法树文件格式整理完成后, 自动保存 “可视化语法树.xlsx” 文件, 删除 临时文件。 [0114] 至此, 测试源代码对应的可视化语法树生成完成, 针对图 5 经过本实施例所描述 的技术方案生成的可视化语法树文档表 1 所示。 [0115] 表 1 [0116] 说 明 书 CN 103645986 A 10 8/11 页 11 [0117] 在表 1 中, 例如第 9 行所示, 语法树的某个节点的完整节点类型名为 “TREENODE_ TYPE_ATOM” , 而该语法树的所有节点的类型名中, 均包含有 “TREENODE_TYPE” , 则将该节点 的类型名简化为 “@_ATOM” , 另外, 可以得到该节点对应测试源代码的行号为 “11” , 且, 该节 点具有三个属性, 属性值分别为 “3” ,“0” ,“10” , 根据语言参考手册, 翻译该节点的属性值, 得到该节点的关注属性值为 “INTEGER : 10” , 其对应的属性含义为 :“数据为整型, 且值为 10” 。 [0118] 二 . 重构语法树 : [0119] 在生成可视化语法树的基础上, 可根据需要对该语法树进行修改, 得到新的语法 树, 以便进行各类语义分析异常测试, 并且, 应该明确, 在语义分析过程中, 修改语法树与修 改源代码的效果是一样的, 如图 8 所示, 根据预先生成的可视化语法树重构新的语法树的 实现过程如下 : [0120] 步骤 S801, 根据待测试的源代码, 生成原始语法树 ; 说 明 书 CN 103645986 A 11 9/11 页 12 [0121] 步骤 S803, 修改节点信息 ; [0122] 在步骤 S801 后, 会生成临时文件 modify_tree_attr.txt, 在该文件中存储预先获 取的原始语法树的所有节点信息, 支持对节点的信息进行修改, 构造新的语法树, 其中, 支 持的修改动作有 : 修改语法树节点属性值, 修改语法树节点所在层级或相对位置, 增加语法 树节点, 删除语法树节点。modify_tree_attr.txt 文件中数据的组织规则与生成可视化语 法树时步骤 S601 中描述的规则相同或者相类似, 临时文件 modify_tree_attr.txt 中所记 录的内容大致如图 9 所示。 [0123] 步骤 S805, 识别修改信息 ; [0124] 在本步骤中, 保存 modify_tree_attr.txt 文件, 通过文件对比算法, 对比原始语 法树节点信息, 和刚刚修改的 modify_tree_attr.txt 文件中语法树的节点信息, 如果两者 之间没有差异, 则认为没有修改语法树, 直接进入语义分析的环节, 如果识别语法树存在节 点变化, 则对发生变更的节点进行相应标记, 并生成 modify_info.txt 文件, 保存处理后的 语法树节点信息。 [0125] 步骤 S807, 重构语法树 ; [0126] 在本步骤中, 检查步骤 S605 中生成的 modify_info.txt 文件, 如果不存在变更信 息, 则此过程到此结束, 如果存在变更信息, 则对发生变更的节点进行相应标记, 并根据这 些信息构造一棵新的语法树, 对新构造的语法树进行语义分析, 其中, modify_info.txt 文 件中的内容大致如图 10 所示。 [0127] 其中, 对发生变更的节点进行标记的方式可以包括但不限于以下方式 : [0128] 与原始语法树相比, 修改的部分被标记成红色, 如果新语法树上增加了节点, 则新 节点的节点类型、 行号、 属性值均被涂成红色, 如果删除了某个节点, 则只在新语法树中去 掉该节点, 不涂色。 [0129] 此外, 在不同实施例中, 对于以上所描述的临时文件的命名均可以根据具体情况 由用户自行选择, 而且, 对于临时文件的格式设置, 也可以不限于上述实施例所描述的方 式。 [0130] 按照上述操作修改临时文件 modify_tree_attr.txt, 修改函数名, 变量类型, 增加 函数参数, 执行生成修改后语法树的操作, 将自动生成修改后语法树文档, 如表 2 所示。 [0131] 表 2 [0132] 说 明 书 CN 103645986 A 12 10/11 页 13 [0133] 不难理解, 修改语法树的效果与修改待测试的 LUSTRE 源文件效果相同, 便于更直 接构造语义错误, 与修改测试源代码相比, 采用直接修改语法树的方式, 可以更直接的修改 语法树节点信息, 更容易构造出各类节点属性值异常, 和节点关系异常等错误但是修改语 法树要求测试人员对语义分析的细节, 以及词法语法分析的细节比较了解, 因为修改后的 语法树默认是没有词法语法错误的, 如果随意修改, 可能产生词法语法错误, 则不能顺利进 行语义分析, 但是, 与修改测试源代码相比, 采用直接修改语法树的方式, 可以更直接的修 改语法树节点信息, 更容易构造出各类节点属性值异常, 和节点关系异常等错误。 [0134] 本发明通过设计一种编译器的可视化语法树的生成方法和重构方法, 将语义分析 时源代码对应的语法树直观的展现出来, 使语义分析的输入和分析过程透明化??墒踊?语法树结构, 能帮助测试人员详细了解语义分析的输入元素, 使测试人员可通过这些节点 的属性信息和层级关系, 了解编译器语义分析过程中的细节, 理解有哪些节点, 需要做哪些 分析, 依据这些信息更方便的设计测试用例, 为测试设计提供参考, 提高测试覆盖率和测试 质量, 另外, 本方法还支持修改语法树的功能, 可以帮助构造各类节点分析的异常测试, 降 低了测试难度, 提高了测试深度。 [0135] 借助于本方法, 可以一次在短时间内将所有节点的信息用图形化的树形结构描述 出来, 并列举所有属性信息, 且每条属性信息都已经过翻译, 可直接被理解, 操作十分简便, 并且, 由于语义分析是基于语法树节点进行的分析, 测试人员通过语法树结构, 很容易了解 到哪些类型的错误是由哪些节点造成的, 这些节点的信息表现在代码中的什么位置, 设法 修改该处的代码便可以构造出相应错误, 此外, 本方法还提供了修改语法树的功能, 也可以 通过不修改源代码, 直接修改语法树结构的方式, 来完成异常测试。 说 明 书 CN 103645986 A 13 11/11 页 14 [0136] 此外, 根据本发明技术方案提供的可视化语法树