• 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
    • / 19
    • 下载费用:30 金币  

    重庆时时彩预测号个位: 一种编译器的可视化语法树的生成方法和重构方法.pdf

    关 键 词:
    一种 编译器 可视化 语法 生成 方法
      专利查询网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    摘要
    申请专利号:

    CN201310629025.3

    申请日:

    2013.11.29

    公开号:

    CN103645986A

    公开日:

    2014.03.19

    当前法律状态:

    授权

    有效性:

    有权

    法律详情: 著录事项变更IPC(主分类):G06F 11/36变更事项:发明人变更前:刘陈虎 周涛 黄太新 刘红刚 冀建伟变更后:刘陈虎 江国进 白涛 孙永滨 周涛 黄太新 刘红刚 宁祾 冀建伟|||授权|||实质审查的生效IPC(主分类):G06F 11/36申请日:20131129|||公开
    IPC分类号: G06F11/36; G06F9/45; G06F17/27 主分类号: G06F11/36
    申请人: 北京广利核系统工程有限公司; 中国广核集团有限公司
    发明人: 刘陈虎; 周涛; 黄太新; 刘红刚; 冀建伟
    地址: 100094 北京市海淀区永丰路5号院5号楼100094
    优先权:
    专利代理机构: 北京元中知识产权代理有限责任公司 11223 代理人: 王明霞
    PDF完整版下载: PDF下载
    法律状态
    申请(专利)号:

    CN201310629025.3

    授权公告号:

    |||||||||

    法律状态公告日:

    2017.05.17|||2016.08.17|||2014.04.16|||2014.03.19

    法律状态类型:

    著录事项变更|||授权|||实质审查的生效|||公开

    摘要

    本发明涉及一种编译器的可视化语法树的生成方法和重构方法,其中,该生成方法包括:步骤(1),解析编译器语义分析??榻邮盏降挠锓ㄊ?,确定语法树的节点信息,节点信息至少包括:节点类型名、节点位置、以及节点属性值;步骤(2),翻译节点属性值,得到相应的节点属性信息,并为语法树中每个节点的节点类型名添加头部标识,得到节点名称,其中,头部标识用于为每个节点提供唯一标识;步骤(3),根据节点名称、以及节点位置,应用预定节点排列算法,对语法树的多个节点进行组织,得到语法树的语法树层级结构,并在语法树层级结构中,关联上节点属性信息;步骤(4),整理树形层级结构,生成可视化语法树;步骤(5),存储可视化语法树。

    权利要求书

    权利要求书
    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中任一项所述的编译器的可视化语法树的生成方法生成的可视化语法树的重构方法,其特征在于,包括:
    步骤a.根据编译器语义分析??榻邮盏降挠锓ㄊ?,生成可视化语法树;
    步骤b.读取所述可视化语法树的节点信息,并根据接收到的修改指令对所述语法树的节点信息进行修改,得到修改后的语法树的节点信息,其中,所述节点信息至少包括:节点名称、节点位置、以及节点属性值;
    步骤c.判断所述修改后的语法树的节点信息与修改前的所述可视化语法树的节点信息中是否存在区别信息,在所述判断结果为是的情况下,对所述区别信息进行标记并存储;
    步骤d.根据所述修改后的语法树的节点信息,重构语法树。

    9.  根据权利要求8所述的重构方法,其特征在于,所述步骤b中对节点信息进行修改的方式包括以下至少之一:
    修改所述语法树中节点的节点属性值、修改所述语法树中节点的节点位置、增加节点、删除节点。

    10.  根据权利要求9所述的重构方法,其特征在于,所述修改所述语法树中节点的节点位置包括以下至少之一:
    修改所述语法树中节点所在层级、修改所述语法树中节点所在层级中的相对位置。

    说明书

    说明书一种编译器的可视化语法树的生成方法和重构方法
    技术领域
    本发明涉及计算机领域,并且特别地,设计一种编译器的可视化语法树的生成方法和生成装置。
    背景技术
    在当前的计算机领域,应用高级语言编译器能够实现将程序语言转化为机器语言的操作,但是,如果编译器设计中存在错误,可能会造成原始程序转化成的计算机语言与程序设计者的初衷不一致,而这种错误在编译器发布后很难检测和纠正,因此,对编译器的测试显得至关重要。
    在现有技术中,编译器的设计主要由词法语法分析、和语义分析等??楣钩?,其中词法语法分析部分多采用flex&bison工具来完成,已较为成熟,而语义分析部分是编译器设计的核心,所以,对语义分析的测试也是编译器测试的重点,但是,语义分析作为编译器实现过程中的一个中间???,其实现过程、??槭淙胍约坝锓ㄊ鹘峁雇哂幸欢ǖ牟煌该餍?,这就为测试带来了困难。
    语义分析测试的重点在于测试对语法树节点的分析过程,语义分析过程大致为:收集词法语法分析后产生的语法树节点信息,分析节点信息中属性信息的各项数据,检查语义的符合程度,如果有错误产生,报告相应的错误码和错误信息。语义分析??榈氖淙胛锓ㄊ?,而测试时,测试人员所编写的待测试源代码,是通过flex&bison工具来生成语法树的,测试人员实际上对所生成语法树的结构并不了解,也就无法真正了解语义分析??榈氖淙?。
    目前语义分析的测试方法主要有两种:
    (方法一)采用类似于黑盒测试的方法,根据语言参考手册,错误码等进行测试,以及一定的随机测试。
    (方法二)在第一种方法的基础上,采用类似白盒测试的方式在代码中对某些节点信息进行监视来辅助测试。
    以同步数据流编程语言LUSTRE语言为例,LUSTRE语言总共有51种待分析的节点,一段 简单的LUSTRE代码,节点数量都有数百个之多,如果采用类似黑盒测试的方式,按照错误码进行测试或随机编写代码测试,很难保证测到分析过程每个节点的分析情况,容易遗漏某些分支,而由于无法透明的了解分析过程,测试人员对这些遗漏的内容往往一无所知。另外,基于错误码的测试过程中,某些错误码可能对应多种类型的语义错误,测试人员有时可能只测试到了其中一两个,就认为某个错误码的测试通过了,而其中所覆盖的语义错误类型,可能并不全面,这种原因造成的测试不全面,测试人员同样无法了解和统计,这些都容易使测试产生风险,给产品质量带来隐患。
    另外一种监视节点信息的测试方式中,采用对源代码进行单步调试的方式,通过使用指针一级一级的追踪,来得到某个节点的属性信息。这种方法虽然可以直接了解到语法树的属性信息,但每次只能观测一个节点,而语义分析过程中节点众多,如果了解更多节点需要设置多个监视器,人为地在监视器中构造复杂的多级指针来观测节点信息,费时费力,并且,所监视到的属性值为原始数据值,需要不断查阅设计文档和数据结构资料或者语言参考手册才能将其翻译成可供测试人员了解的属性含义,并且这种方式只能了解单个属性值,无法了解节点与节点之间的相对关系,无法明确得知节点在整个语法树中所处的位置,从而无法确定整体的树形结构,所以,使节点的信息透明化,仍然存在很大的局限性,因此采用这种方式,虽然能真实观测到节点的属性值信息,但由于存在多种局限,实际上很难实现。
    鉴于此提出本发明。
    发明内容
    本发明的目的为克服现有技术的不足,提供一种编译器的可视化语法树的生成方法和重构方法。
    为了实现该目的,本发明采用如下技术方案:
    根据本发明的一个方面,提供了一种编译器的可视化语法树的生成方法,该生成方法包括:
    步骤(1),解析编译器语义分析??榻邮盏降挠锓ㄊ?,确定语法树的节点信息,节点信息至少包括:节点类型名、节点位置、以及节点属性值;
    步骤(2),翻译节点属性值,得到相应的节点属性信息,并为语法树中每个节点的节点类型名添加头部标识,得到节点名称,其中,头部标识用于为每个节点提供唯一标识;
    步骤(3),根据节点名称、以及节点位置,应用预定节点排列算法,对语法树的多个节点进行组织,得到语法树的语法树层级结构,并在语法树层级结构中,关联上节点属性信息;
    步骤(4),整理树形层级结构,生成可视化语法树;
    步骤(5),存储可视化语法树。
    其中,节点位置的确定方式包括:
    通过遍历算法,收集语法树中每个节点的父节点、子节点、或者兄弟节点的信息,并根据信息,推算出该节点在语法树中的相对位置。
    并且,翻译节点属性值,得到相应的节点属性信息包括:
    根据语言参考手册、或者设计文档,翻译所关注的节点属性值,得到相应的节点属性信息。
    此外,节点属性信息的确定方式包括:
    根据预先存储的节点属性值与节点属性含义的对应关系,确定节点的节点属性信息,其中,所述节点属性信息包括节点属性含义。
    并且,在为语法树中每个节点的节点类型名添加头部标识之前,将节点类型名中的公共部分用指定字符代替。
    优选地,预定节点排列算法包括:
    依据节点的相对位置关系,为每个节点设计存储路径,在所述存储路径下为每个节点创建文件夹,文件夹名称以节点名称命名,应用WINDOS批处理的TREE命令,生成树型层级结构;并且,
    在语法树层级结构中,关联上节点属性信息之前,将语法树层级结构中节点名称中的头部标识去除。
    并且,整理树形层级结构包括:
    将树形层级结构、以及树形层级结构所关联的节点属性信息拷贝至EXCEL文档中,并在指定位置添加标题,并根据预定规则,设置EXCEL文档中内容的颜色、和/或格式。
    根据本发明的另一方面,还提供了一种基于上述的编译器的可视化语法树的生成方法生成的可视化语法树的重构方法,该方法包括:
    步骤a.根据编译器语义分析??榻邮盏降挠锓ㄊ?,生成可视化语法树;
    步骤b.读取可视化语法树的节点信息,并根据接收到的修改指令对语法树的节点信息进行修改,得到修改后的语法树的节点信息,其中,节点信息至少包括:节点名称、节点位置、以及节点属性值;
    步骤c.判断修改后的语法树的节点信息与修改前的可视化语法树的节点信息中是否存在区别信息,在判断结果为是的情况下,对区别信息进行标记并存储;
    步骤d.根据修改后的语法树的节点信息,重构语法树。
    其中,对节点信息进行修改的方式包括以下至少之一:
    修改语法树中节点的节点属性值、修改语法树中节点的节点位置、增加节点、删除节点。
    并且,修改语法树中节点的节点位置包括以下至少之一:
    修改语法树中节点所在层级、修改语法树中节点所在层级中的相对位置。
    采用本发明所述的技术方案后,带来以下有益效果:
    通过解析编译器语义分析??榻邮盏降挠锓ㄊ?,获取该语法树的节点信息,并根据节点信息,以预定方式,对该语法树中的节点进行组织,得到该语法树的语法树层级结构,并整理该语法树层级结构,生成可视化语法树,使用户可以直观了解到编译器语义分析??榈氖淙?,从而,方便设计测试用例,提高语义分析测试的覆盖率,进而提高测试质量。
    下面结合附图对本发明的具体实施方式作进一步详细的描述。
    附图说明
    图1:根据本发明实施例的编译器的可视化语法树的生成方法流程图;
    图2:根据本发明实施例的编译器的可视化语法树的重构方法流程图;
    图3:结合编译器的可视化语法树的生成方法完成语义分析测试的整体实现过程示意图;
    图4:结合本发明实施例的编译器的可视化语法树的生成方法以及编译器的可视化语法树的重构方法完成语义分析测试的整体流程示意图;
    图5:根据本发明一个实施例所列举的一段LUSTRE语言代码示意图;
    图6:根据本发明一个实施例的编译器的可视化语法树的生成方法流程图;
    图7:根据本发明一个实施例的acg_tree_info.txt文件内容示意图;
    图8:根据本发明一个实施例的可视化语法树的重构方法流程图;
    图9:根据本发明一个实施例的modify_tree_attr.txt文件内容示意图;
    图10:根据本发明一个实施例的modify_info.txt文件内容示意图。
    具体实施方式
    根据本发明的实施例,提供了一种编译器的可视化语法树的生成方法。
    如图1所示,该生成方法包括:
    步骤S101,解析编译器语义分析??榻邮盏降挠锓ㄊ?,确定语法树的节点信息,节点信息至少包括:节点类型名、节点位置、以及节点属性值;
    步骤S103,翻译节点属性值,得到相应的节点属性信息,并为语法树中每个节点的节点类型名添加头部标识,得到节点名称,其中,头部标识用于为每个节点提供唯一标识;
    通过翻译节点属性值,可以将语法树属性值翻译成测试人员容易理解的属性含义,而不是仅仅看到一个个数值。
    步骤S105,根据节点名称、以及节点位置,应用预定节点排列算法,对语法树的多个节点进行组织,得到语法树的语法树层级结构,并在语法树层级结构中,关联上节点属性信息;
    步骤S107,整理树形层级结构,生成可视化语法树;
    步骤S109,存储可视化语法树。
    其中,节点位置的确定方式包括:
    通过遍历算法,收集语法树中每个节点的父节点、子节点、或者兄弟节点的信息,并根据信息,推算出该节点在语法树中的相对位置。
    此外,在一个实施例中,还可以通过遍历算法,收集语法树中每个节点的行号信息,并显示在该语法树中,从而,可以方便用户快速准确确定每个节点的位置。
    此外,翻译节点属性值,得到相应的节点属性信息包括:
    根据语言参考手册、或者设计文档,翻译所关注的节点属性值,得到相应的节点属性信息。
    并且,节点属性信息的确定方式包括:
    根据预先存储的节点属性值与节点属性含义的对应关系,确定节点的节点属性信息,其中,所述节点属性信息包括节点属性含义。
    并且,在确定节点属性信息的过程中,还可以进一步确定与每一个节点的节点属性信息相对应的属性解释,同时,也将该属性解释关联至语法树层级结构中,方便用户阅读和理解。
    此外,在为语法树中每个节点的节点类型名添加头部标识之前,将节点类型名中的公共部分用指定字符代替。
    例如,在一个实施例中,语法树中所有节点的类型名中均包含“TREENODE_TYPE”的字符串,则在为每个节点的节点类型名添加头部标识前,先将“TREENODE_TYPE”用字符“@”代替,从而,使最终生成的语法树界面更加清晰、简洁,并且,由于对语法树中字符长度进行了一定程度的简化,使生成语法树所用的时间等资源也在一定程度上得以节约。
    优选地,预定节点排列算法包括:
    依据节点的相对位置关系,为每个节点设计存储路径,在所述存储路径下为每个节点创建文件夹,文件夹名称以节点名称命名,应用WINDOS批处理的TREE命令,生成树型层级结构;并且,
    在语法树层级结构中,关联上节点属性信息之前,将语法树层级结构中节点名称中的头部标识去除。
    将语法树层级结构中节点名称中的头部标识去除,可以使最终生成的语法树界面更加直观、简洁,方便用户阅读。
    此外,整理树形层级结构包括:
    将树形层级结构、以及树形层级结构所关联的节点属性信息拷贝至EXCEL文档中,并在指定位置添加标题,并根据预定规则,设置EXCEL文档中内容的颜色、和/或格式。
    根据本发明的实施例,还提供了一种基于上述编译器的可视化语法树的生成方法生成的可视化语法树的重构方法。如图2所示,该重构方法包括:
    步骤S201,根据编译器语义分析??榻邮盏降挠锓ㄊ?,生成可视化语法树;
    步骤S203,读取可视化语法树的节点信息,并根据接收到的修改指令对语法树的节点信息进行修改,得到修改后的语法树的节点信息,其中,节点信息至少包括:节点名称、节点位置、以及节点属性值;
    步骤S205,判断修改后的语法树的节点信息与修改前的可视化语法树的节点信息中是否存在区别信息,在判断结果为是的情况下,对区别信息进行标记并存储;
    步骤S207,根据修改后的语法树的节点信息,重构语法树。
    其中,对节点信息进行修改的方式包括以下至少之一:
    修改语法树中节点的节点属性值、修改语法树中节点的节点位置、增加节点、删除节点。
    并且,修改语法树中节点的节点位置包括以下至少之一:
    修改语法树中节点所在层级、修改语法树中节点所在层级中的相对位置。
    例如以下具体实施例,根据本发明的技术方案提供了一种编译器的可视化语法树的生成方法,主要使用C语言、VBS脚本语言,以及批处理脚本完成,在windows XP操作系统环境下,使用Visual Studio2010编写C语言代码,并生成可执行文件,可将待测试源代码对应的语法树,在短时间内自动以图形的方式显示出来,自动生成语法树结构图、行号信息、属性值、属性含义注释、以及节点之间的层级关系等信息,从而让测试人员能清晰的看到语义分析??榈氖淙?,帮助了解语义分析的过程和细节,为测试设计提供参考,提高测试的质量和测试深度,并且支持对语法树结构进行修改,可帮助构造各类正常、或者异常功能测试,图3为结合该生成方法完成语义分析测试的整体实现过程示意图,结合编译器的可视化语法树的生成方法和重构方法完成在语义分析测试的整体流程图如图4所示。
    本方法的可以通过编写计算机程序的方式实现,具体实现过程如下两个部分:
    (部分一)本部分程序嵌入到编译器开发工程中,和语义分析部分的输入接口相结合,用于解析flex&bison生成的语法树结构,并将这些已解析的信息按照一定的格式存储于临时文件中;
    (部分二)本部分程序用于将已读出的语法树信息进行组织和整理,形成可视化树形结构,其中,本部分程序被封装成可执行文件,使用过程中,调试编译器工程,单步运行到语义分析??槿肟?,运行可视化语法树生成工具,便可通过生成的文档,直观的看到语法树信 息,VBS脚本和批处理脚本用于中间过程处理、格式整理、文档生成等,此外,在产生可视化语法树的基础上,增加识别节点修改内容的逻辑,构成“生成修改后语法树”的可执行文件,可用于重构修改后的语法树。
    第一部分程序的实现细节,可根据不同编译器语法树节点信息的不同,进行定制,适当修改节点类型名和属性读取部分的内容,程序主体框架无需修改。下面将以同步数据流编程语言——LUSTRE语言为例,对于如图5所示的一段LUSTRE代码,该方法的实现过程进行详细描述:
    一.生成可视化语法树:
    本步骤的目的在于将待测试源代码对应的语法树,以可视化的形式展现出来,并显示语法树节点信息和层级关系。
    生成可视化语法树的实现过程被封装成一个可执行文件,操作的输入文件是待测试的LUSTRE源代码,可执行文件在执行过程中总共包含了5个处理过程,如图6所示:
    步骤S601,收集节点信息;
    在本步骤中,完成收集节点信息的工作。将第一部分程序嵌入到LUSTRE语言编译器中,读取由flex&bison生成的语法树,通过对树结构的遍历算法,得到每个节点的详细信息,并通过分析每个节点的父节点,子节点,兄弟节点的信息推算出节点在语法树中的相对位置,将收集到的语法树信息整理,生成两个临时文件:acg_tree_info.txt和lustre_file_path.txt,其中,
    acg_tree_info.txt用于记录所有节点信息,该节点信息包括但不限于节点类型名称、相对位置、属性值,其中,不同的节点信息,可以用不同的方式表示,例如:在一个实施例中,如图7所示,用“@”符号作为分隔符,“@”符号之前的字符串代表节点类型,“@”符号后面的用数字串表示节点在语法树中的相对位置(比如:用1表示第1个节点,11132代表第1个节点的第1个子节点的第1个子节点的第3个子节点的第2个子节点,以此类推),数字串后面用指定符号(比如:“###”符号)表示该节点的属性,在“###”符号后面为属性值,并且,根据预定规则,对于不同的类型的属性,存放在不同的位置,例如:数字串后面有四个“###”符号,分别代表了该节点的四个属性,其中,前三处为通用属性,最后一处为节点属性,最后一个“###”后可能有“*^*~~*^*~~...”结构,代表此节点属性的分属性,“*^*~~*^*~~...”后面可能还对应“_#_~~_#_~~...”结构,代表分属性的分属性,此外, 如果属性值为空,则记录为“<empty>”;
    例如,在一个实施例中,acg_tree_info.txt文件中记录的一部分内容为:
    [email protected]###4###0###<empty>###*^*Output2*^*<empty>*^*0*^*0
    则,该节点的节点类型名为“TREENODE_TYPE_VAR_ID”,节点在语法树中相对位置为第1个节点的第1个子节点的第1个子节点的第3个子节点的第2个子节点的第1个子节点,该节点的第一个属性值为“4”,第二个属性值为“0”,第三个属性值为空,第四个属性值的第一个分属性为“Output2”,第四个属性值的第二个分属性为空,第三个和第四个分属性值为“0”。
    lustre_file_path.txt用于记录待测试的LUSTRE源代码在本地计算机中的存放路径。
    步骤S603,翻译节点信息;
    在本步骤中,对步骤S501中获得的语法树节点属性信息进行翻译。依据语言参考手册,将每个节点的属性逐一解释,便于测试人员能直观了解属性含义,而不是看到一个个数值,另外,整理语法树节点类型的名称,使节点类型名尽可能简洁,并为节点类型名加头部标识,保证其唯一性,通过简化的节点类型名和唯一的头部标识构成节点名称,为生成树形结构做准备。此过程中仍然生成两个临时文件:create_attr.txt和create_path.txt,其中,
    create_attr.txt用于记录已经翻译的节点信息。记录内容分别为:该节点对应的LUSTRE源代码的行号、节点的属性值、测试过程中所关注的属性以及对属性值的解释;
    create_path.txt用于记录所创建的节点路径的名称,依据节点位置信息,为生成层级结构做准备。
    步骤S605,整理树形层级结构
    在本步骤中,依据上一步骤中收集到的节点名称和位置关系的信息,依据节点的相对位置关系,为每个节点设计存储路径,在所述存储路径下为每个节点创建文件夹,文件夹名称以节点名称命名,应用WINDOS批处理的TREE命令,生成树型层级关系,完成树型结构的整理,此过程产生三个临时文件:tree_tmp.txt、tree.txt、和all_tree_info.txt,其中,
    tree_tmp.txt用于记录临时树形节点的层级关系,该树形层级结关系中,每个文件夹名称以节点名称命名,且,每个节点名称均带有用于表示其唯一性的头部标识;
    tree.txt用于整理tree_tmp.txt文件,将每个节点名称中的头部标识去除,形成并存储最终的树形层级关系,从而使最终的树形层级关系更加简洁、直观;
    all_tree_info.txt用于在语法树层级结构中,关联上每个节点的所有属性信息。
    步骤S607,整理树形格式
    在本步骤中,整理树形结构,使用脚本将临时文件all_tree_info.txt中包含的所有节点层级关系信息和属性信息拷贝到新建的EXCEL文档中,在第一行中添加相应的标题,并整理EXCEL中数据的颜色和格式,使整个语法树更易观察,此过程生成文件:可视化语法树.xlsx。
    步骤S609,生成可视化语法树
    待可视化语法树文件格式整理完成后,自动保存“可视化语法树.xlsx”文件,删除临时文件。
    至此,测试源代码对应的可视化语法树生成完成,针对图5经过本实施例所描述的技术方案生成的可视化语法树文档表1所示。
    表1

    在表1中,例如第9行所示,语法树的某个节点的完整节点类型名为“TREENODE_TYPE_ATOM”,而该语法树的所有节点的类型名中,均包含有“TREENODE_TYPE”,则将该节点的类型名简化为“@_ATOM”,另外,可以得到该节点对应测试源代码的行号为“11”,且,该节点具有三个属性,属性值分别为“3”,“0”,“10”,根据语言参考手册,翻译该节点的属性值,得到该节点的关注属性值为“INTEGER:10”,其对应的属性含义为:“数据为整型,且值为10”。
    二.重构语法树:
    在生成可视化语法树的基础上,可根据需要对该语法树进行修改,得到新的语法树,以便进行各类语义分析异常测试,并且,应该明确,在语义分析过程中,修改语法树与修改源 代码的效果是一样的,如图8所示,根据预先生成的可视化语法树重构新的语法树的实现过程如下:
    步骤S801,根据待测试的源代码,生成原始语法树;
    步骤S803,修改节点信息;
    在步骤S801后,会生成临时文件modify_tree_attr.txt,在该文件中存储预先获取的原始语法树的所有节点信息,支持对节点的信息进行修改,构造新的语法树,其中,支持的修改动作有:修改语法树节点属性值,修改语法树节点所在层级或相对位置,增加语法树节点,删除语法树节点。modify_tree_attr.txt文件中数据的组织规则与生成可视化语法树时步骤S601中描述的规则相同或者相类似,临时文件modify_tree_attr.txt中所记录的内容大致如图9所示。
    步骤S805,识别修改信息;
    在本步骤中,保存modify_tree_attr.txt文件,通过文件对比算法,对比原始语法树节点信息,和刚刚修改的modify_tree_attr.txt文件中语法树的节点信息,如果两者之间没有差异,则认为没有修改语法树,直接进入语义分析的环节,如果识别语法树存在节点变化,则对发生变更的节点进行相应标记,并生成modify_info.txt文件,保存处理后的语法树节点信息。
    步骤S807,重构语法树;
    在本步骤中,检查步骤S605中生成的modify_info.txt文件,如果不存在变更信息,则此过程到此结束,如果存在变更信息,则对发生变更的节点进行相应标记,并根据这些信息构造一棵新的语法树,对新构造的语法树进行语义分析,其中,modify_info.txt文件中的内容大致如图10所示。
    其中,对发生变更的节点进行标记的方式可以包括但不限于以下方式:
    与原始语法树相比,修改的部分被标记成红色,如果新语法树上增加了节点,则新节点的节点类型、行号、属性值均被涂成红色,如果删除了某个节点,则只在新语法树中去掉该节点,不涂色。
    此外,在不同实施例中,对于以上所描述的临时文件的命名均可以根据具体情况由用户自行选择,而且,对于临时文件的格式设置,也可以不限于上述实施例所描述的方式。
    按照上述操作修改临时文件modify_tree_attr.txt,修改函数名,变量类型,增加函数参数,执行生成修改后语法树的操作,将自动生成修改后语法树文档,如表2所示。
    表2

    不难理解,修改语法树的效果与修改待测试的LUSTRE源文件效果相同,便于更直接构造语义错误,与修改测试源代码相比,采用直接修改语法树的方式,可以更直接的修改语法树节点信息,更容易构造出各类节点属性值异常,和节点关系异常等错误但是修改语法树要求测试人员对语义分析的细节,以及词法语法分析的细节比较了解,因为修改后的语法树默认是没有词法语法错误的,如果随意修改,可能产生词法语法错误,则不能顺利进行语义分析,但是,与修改测试源代码相比,采用直接修改语法树的方式,可以更直接的修改语法树节点信息,更容易构造出各类节点属性值异常,和节点关系异常等错误。
    本发明通过设计一种编译器的可视化语法树的生成方法和重构方法,将语义分析时源代码对应的语法树直观的展现出来,使语义分析的输入和分析过程透明化??墒踊挠锓ㄊ鹘峁?,能帮助测试人员详细了解语义分析的输入元素,使测试人员可通过这些节点的属性信息和层级关系,了解编译器语义分析过程中的细节,理解有哪些节点,需要做哪些分析,依据这些信息更方便的设计测试用例,为测试设计提供参考,提高测试覆盖率和测试质量,另外,本方法还支持修改语法树的功能,可以帮助构造各类节点分析的异常测试,降低了测试难度,提高了测试深度。
    借助于本方法,可以一次在短时间内将所有节点的信息用图形化的树形结构描述出来,并列举所有属性信息,且每条属性信息都已经过翻译,可直接被理解,操作十分简便,并且,由于语义分析是基于语法树节点进行的分析,测试人员通过语法树结构,很容易了解到哪些类型的错误是由哪些节点造成的,这些节点的信息表现在代码中的什么位置,设法修改该处的代码便可以构造出相应错误,此外,本方法还提供了修改语法树的功能,也可以通过不修改源代码,直接修改语法树结构的方式,来完成异常测试。
    此外,根据本发明技术方案提供的可视化语法树的生成方法适用于任何使用flex&bison工具进行词法语法分析的编译器,且此方法支持将任意的测试代码生成语法树,具有通用性。
    以上所述仅为本发明的优选实施方式,应当指出,对于本领域的普通技术人员而言,在不脱离本发明原理前提下,还可以做出多种变形和改进,这也应该视为本发明的?;し段?。

    关于本文
    本文标题:一种编译器的可视化语法树的生成方法和重构方法.pdf
    链接地址://www.4mum.com.cn/p-5779422.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    [email protected] 2017-2018 www.4mum.com.cn网站版权所有
    经营许可证编号:粤ICP备17046363号-1 
     


    收起
    展开
  • 四川郎酒股份有限公司获第十二届人民企业社会责任奖年度环保奖 2019-05-13
  • 银保监会新规剑指大企业多头融资和过度融资 2019-05-12
  • 韩国再提4国联合申办世界杯 中国网友无视:我们自己来 2019-05-11
  • 中国人为什么一定要买房? 2019-05-11
  • 十九大精神进校园:风正扬帆当有为 勇做时代弄潮儿 2019-05-10
  • 粽叶飘香幸福邻里——廊坊市举办“我们的节日·端午”主题活动 2019-05-09
  • 太原设禁鸣路段 设备在测试中 2019-05-09
  • 拜耳医药保健有限公司获第十二届人民企业社会责任奖年度企业奖 2019-05-08
  • “港独”没出路!“梁天琦们”该醒醒了 2019-05-07
  • 陈卫平:中国文化内涵包含三方面 文化复兴表现在其中 2019-05-06
  • 人民日报客户端辟谣:“合成军装照”产品请放心使用 2019-05-05
  • 【十九大·理论新视野】为什么要“建设现代化经济体系”?   2019-05-04
  • 聚焦2017年乌鲁木齐市老城区改造提升工程 2019-05-04
  • 【专家谈】上合组织——构建区域命运共同体的有力实践者 2019-05-03
  • 【华商侃车NO.192】 亲!楼市火爆,别忘了买车位啊! 2019-05-03
  • 福彩四川时时彩直播 体彩p5跨度走势图 山西快乐十分竖屏开奖 体彩内蒙古十一选五82 云南快乐10分技巧 金莎娱乐棋牌真人在线 扑克牌推牌九怎么玩 广西快3专家推荐号码 宁夏11选5-百度 六人排球全场站位图 微乐江苏麻将下载 qq分分彩官网走势图 管家婆一尾中特 千炮捕鱼游戏 急速赛车开奖官网 ag真人娱乐客户端