CN103645986A - 一种编译器的可视化语法树的生成方法和重构方法 - Google Patents

一种编译器的可视化语法树的生成方法和重构方法 Download PDF

Info

Publication number
CN103645986A
CN103645986A CN201310629025.3A CN201310629025A CN103645986A CN 103645986 A CN103645986 A CN 103645986A CN 201310629025 A CN201310629025 A CN 201310629025A CN 103645986 A CN103645986 A CN 103645986A
Authority
CN
China
Prior art keywords
node
syntax tree
tree
information
hierarchical structure
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201310629025.3A
Other languages
English (en)
Other versions
CN103645986B (zh
Inventor
刘陈虎
周涛
黄太新
刘红刚
冀建伟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
China General Nuclear Power Corp
China Techenergy Co Ltd
Original Assignee
China General Nuclear Power Corp
China Techenergy Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by China General Nuclear Power Corp, China Techenergy Co Ltd filed Critical China General Nuclear Power Corp
Priority to CN201310629025.3A priority Critical patent/CN103645986B/zh
Publication of CN103645986A publication Critical patent/CN103645986A/zh
Application granted granted Critical
Publication of CN103645986B publication Critical patent/CN103645986B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

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

Description

一种编译器的可视化语法树的生成方法和重构方法
技术领域
本发明涉及计算机领域,并且特别地,设计一种编译器的可视化语法树的生成方法和生成装置。
背景技术
在当前的计算机领域,应用高级语言编译器能够实现将程序语言转化为机器语言的操作,但是,如果编译器设计中存在错误,可能会造成原始程序转化成的计算机语言与程序设计者的初衷不一致,而这种错误在编译器发布后很难检测和纠正,因此,对编译器的测试显得至关重要。
在现有技术中,编译器的设计主要由词法语法分析、和语义分析等模块构成,其中词法语法分析部分多采用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文件中记录的一部分内容为:
TREENODE_TYPE_VAR_ID111321###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
Figure BDA0000426669200000111
在表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
Figure BDA0000426669200000131
不难理解,修改语法树的效果与修改待测试的LUSTRE源文件效果相同,便于更直接构造语义错误,与修改测试源代码相比,采用直接修改语法树的方式,可以更直接的修改语法树节点信息,更容易构造出各类节点属性值异常,和节点关系异常等错误但是修改语法树要求测试人员对语义分析的细节,以及词法语法分析的细节比较了解,因为修改后的语法树默认是没有词法语法错误的,如果随意修改,可能产生词法语法错误,则不能顺利进行语义分析,但是,与修改测试源代码相比,采用直接修改语法树的方式,可以更直接的修改语法树节点信息,更容易构造出各类节点属性值异常,和节点关系异常等错误。
本发明通过设计一种编译器的可视化语法树的生成方法和重构方法,将语义分析时源代码对应的语法树直观的展现出来,使语义分析的输入和分析过程透明化。可视化的语法树结构,能帮助测试人员详细了解语义分析的输入元素,使测试人员可通过这些节点的属性信息和层级关系,了解编译器语义分析过程中的细节,理解有哪些节点,需要做哪些分析,依据这些信息更方便的设计测试用例,为测试设计提供参考,提高测试覆盖率和测试质量,另外,本方法还支持修改语法树的功能,可以帮助构造各类节点分析的异常测试,降低了测试难度,提高了测试深度。
借助于本方法,可以一次在短时间内将所有节点的信息用图形化的树形结构描述出来,并列举所有属性信息,且每条属性信息都已经过翻译,可直接被理解,操作十分简便,并且,由于语义分析是基于语法树节点进行的分析,测试人员通过语法树结构,很容易了解到哪些类型的错误是由哪些节点造成的,这些节点的信息表现在代码中的什么位置,设法修改该处的代码便可以构造出相应错误,此外,本方法还提供了修改语法树的功能,也可以通过不修改源代码,直接修改语法树结构的方式,来完成异常测试。
此外,根据本发明技术方案提供的可视化语法树的生成方法适用于任何使用flex&bison工具进行词法语法分析的编译器,且此方法支持将任意的测试代码生成语法树,具有通用性。
以上所述仅为本发明的优选实施方式,应当指出,对于本领域的普通技术人员而言,在不脱离本发明原理前提下,还可以做出多种变形和改进,这也应该视为本发明的保护范围。

Claims (10)

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所述的重构方法,其特征在于,所述修改所述语法树中节点的节点位置包括以下至少之一:
修改所述语法树中节点所在层级、修改所述语法树中节点所在层级中的相对位置。
CN201310629025.3A 2013-11-29 2013-11-29 一种编译器的可视化语法树的生成方法和重构方法 Active CN103645986B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310629025.3A CN103645986B (zh) 2013-11-29 2013-11-29 一种编译器的可视化语法树的生成方法和重构方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310629025.3A CN103645986B (zh) 2013-11-29 2013-11-29 一种编译器的可视化语法树的生成方法和重构方法

Publications (2)

Publication Number Publication Date
CN103645986A true CN103645986A (zh) 2014-03-19
CN103645986B CN103645986B (zh) 2016-08-17

Family

ID=50251207

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310629025.3A Active CN103645986B (zh) 2013-11-29 2013-11-29 一种编译器的可视化语法树的生成方法和重构方法

Country Status (1)

Country Link
CN (1) CN103645986B (zh)

Cited By (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105808260A (zh) * 2016-03-10 2016-07-27 成都神秘方块科技有限公司 一种逻辑节点树状可视化编辑游戏引擎
CN106293653A (zh) * 2015-05-19 2017-01-04 深圳市腾讯计算机***有限公司 代码处理方法及装置
CN106372042A (zh) * 2016-08-31 2017-02-01 北京奇艺世纪科技有限公司 一种文档内容获取方法和装置
CN106373036A (zh) * 2016-09-21 2017-02-01 广东中建普联科技股份有限公司 建设工程文件数据自动识别分析方法及***
CN106462406A (zh) * 2014-05-15 2017-02-22 微软技术许可有限责任公司 客户端侧代码的中间表示的交互式查看器
CN106874187A (zh) * 2016-12-29 2017-06-20 腾讯科技(深圳)有限公司 代码覆盖率收集方法和装置
CN107133027A (zh) * 2017-03-30 2017-09-05 南京南瑞继保电气有限公司 一种语法树层次化表示方法
WO2017167118A1 (zh) * 2016-03-31 2017-10-05 阿里巴巴集团控股有限公司 编译计算机语言的方法和装置
CN107665124A (zh) * 2017-09-14 2018-02-06 广东神马搜索科技有限公司 模块化JavaScript文件处理方法、设备和服务器
CN108121565A (zh) * 2016-11-28 2018-06-05 阿里巴巴集团控股有限公司 生成指令集编码的方法、装置和***
CN108509284A (zh) * 2018-03-08 2018-09-07 华南理工大学 一种应用于函数式编程的树状模型任务管理***
CN109901873A (zh) * 2019-02-26 2019-06-18 北京真知科技有限公司 基于语法树的软件功能重构方法及装置
CN110008304A (zh) * 2019-04-03 2019-07-12 网易(杭州)网络有限公司 行为树的差异可视化处理方法和装置
CN110659063A (zh) * 2019-08-08 2020-01-07 平安科技(深圳)有限公司 软件项目重构方法、装置、计算机装置及存储介质
CN110737466A (zh) * 2019-10-16 2020-01-31 南京航空航天大学 基于静态程序分析的源代码编码序列表示方法
CN110990263A (zh) * 2019-11-09 2020-04-10 上海集成电路研发中心有限公司 一种测试案例集的自动生成器及生成方法
CN111090417A (zh) * 2019-11-14 2020-05-01 杭州中恒电气股份有限公司 二进制文件解析方法、装置、设备及介质
CN111880777A (zh) * 2020-06-23 2020-11-03 北京三快在线科技有限公司 程序信息下发方法、装置、电子设备
CN111967229A (zh) * 2020-09-01 2020-11-20 申建常 一种高效标签式数据分析方法及分析***
CN112286557A (zh) * 2020-11-05 2021-01-29 苏州帝博信息技术有限公司 一种非覆盖式更新代码内容的方法和装置
CN112579065A (zh) * 2019-09-27 2021-03-30 北京广利核***工程有限公司 一种将图形组态画面生成跨平台代码的方法及***
CN112860362A (zh) * 2021-02-05 2021-05-28 达而观数据(成都)有限公司 一种机器人自动化流程的可视化调试方法及调试***
CN113110874A (zh) * 2021-04-14 2021-07-13 北京沃东天骏信息技术有限公司 用于生成代码结构图的方法和装置
CN114840196A (zh) * 2022-07-06 2022-08-02 中国汽车技术研究中心有限公司 Modelica语言模型处理方法、设备和存储介质
CN115840751A (zh) * 2023-02-21 2023-03-24 山东经伟晟睿数据技术有限公司 一种新型树状数据的编码方法
CN111090419B (zh) * 2019-11-26 2023-04-07 广东工业大学 一种基于结点入度变化的树结构可视化方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007011774A (ja) * 2005-06-30 2007-01-18 Nippon Telegr & Teleph Corp <Ntt> 文章解析装置、文章解析方法、プログラムおよび記憶媒体
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2007011774A (ja) * 2005-06-30 2007-01-18 Nippon Telegr & Teleph Corp <Ntt> 文章解析装置、文章解析方法、プログラムおよび記憶媒体
CN101216803A (zh) * 2008-01-09 2008-07-09 四川大学 基于基路径的测试程序控制流路径集生成方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
蒋秀锋: "可视编译器的设计与实现", 《计算机与现代化》, no. 10, 31 October 2010 (2010-10-31) *

Cited By (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106462406B (zh) * 2014-05-15 2021-08-24 微软技术许可有限责任公司 客户端侧代码的中间表示的交互式查看器
CN106462406A (zh) * 2014-05-15 2017-02-22 微软技术许可有限责任公司 客户端侧代码的中间表示的交互式查看器
CN106293653A (zh) * 2015-05-19 2017-01-04 深圳市腾讯计算机***有限公司 代码处理方法及装置
CN106293653B (zh) * 2015-05-19 2020-11-06 深圳市腾讯计算机***有限公司 代码处理方法及装置、计算机可读介质
CN105808260A (zh) * 2016-03-10 2016-07-27 成都神秘方块科技有限公司 一种逻辑节点树状可视化编辑游戏引擎
TWI746520B (zh) * 2016-03-31 2021-11-21 香港商阿里巴巴集團服務有限公司 編譯計算機語言的方法和裝置
WO2017167118A1 (zh) * 2016-03-31 2017-10-05 阿里巴巴集团控股有限公司 编译计算机语言的方法和装置
CN107291521A (zh) * 2016-03-31 2017-10-24 阿里巴巴集团控股有限公司 编译计算机语言的方法和装置
CN107291521B (zh) * 2016-03-31 2020-12-04 阿里巴巴集团控股有限公司 编译计算机语言的方法和装置
US10606568B2 (en) 2016-03-31 2020-03-31 Alibaba Group Holding Limited Method and apparatus for compiling computer language
CN106372042B (zh) * 2016-08-31 2019-09-24 北京奇艺世纪科技有限公司 一种文档内容获取方法和装置
CN106372042A (zh) * 2016-08-31 2017-02-01 北京奇艺世纪科技有限公司 一种文档内容获取方法和装置
CN106373036A (zh) * 2016-09-21 2017-02-01 广东中建普联科技股份有限公司 建设工程文件数据自动识别分析方法及***
CN108121565B (zh) * 2016-11-28 2022-02-18 阿里巴巴集团控股有限公司 生成指令集编码的方法、装置和***
CN108121565A (zh) * 2016-11-28 2018-06-05 阿里巴巴集团控股有限公司 生成指令集编码的方法、装置和***
CN106874187A (zh) * 2016-12-29 2017-06-20 腾讯科技(深圳)有限公司 代码覆盖率收集方法和装置
CN107133027A (zh) * 2017-03-30 2017-09-05 南京南瑞继保电气有限公司 一种语法树层次化表示方法
CN107665124A (zh) * 2017-09-14 2018-02-06 广东神马搜索科技有限公司 模块化JavaScript文件处理方法、设备和服务器
CN108509284A (zh) * 2018-03-08 2018-09-07 华南理工大学 一种应用于函数式编程的树状模型任务管理***
CN109901873A (zh) * 2019-02-26 2019-06-18 北京真知科技有限公司 基于语法树的软件功能重构方法及装置
CN109901873B (zh) * 2019-02-26 2022-05-10 北京真知科技有限公司 基于语法树的软件功能重构方法及装置
CN110008304A (zh) * 2019-04-03 2019-07-12 网易(杭州)网络有限公司 行为树的差异可视化处理方法和装置
CN110659063A (zh) * 2019-08-08 2020-01-07 平安科技(深圳)有限公司 软件项目重构方法、装置、计算机装置及存储介质
CN112579065A (zh) * 2019-09-27 2021-03-30 北京广利核***工程有限公司 一种将图形组态画面生成跨平台代码的方法及***
CN110737466A (zh) * 2019-10-16 2020-01-31 南京航空航天大学 基于静态程序分析的源代码编码序列表示方法
CN110990263B (zh) * 2019-11-09 2024-03-15 上海集成电路研发中心有限公司 一种测试案例集的自动生成器及生成方法
CN110990263A (zh) * 2019-11-09 2020-04-10 上海集成电路研发中心有限公司 一种测试案例集的自动生成器及生成方法
CN111090417A (zh) * 2019-11-14 2020-05-01 杭州中恒电气股份有限公司 二进制文件解析方法、装置、设备及介质
CN111090417B (zh) * 2019-11-14 2023-11-28 杭州中恒电气股份有限公司 二进制文件解析方法、装置、设备及介质
CN111090419B (zh) * 2019-11-26 2023-04-07 广东工业大学 一种基于结点入度变化的树结构可视化方法
CN111880777A (zh) * 2020-06-23 2020-11-03 北京三快在线科技有限公司 程序信息下发方法、装置、电子设备
CN111967229A (zh) * 2020-09-01 2020-11-20 申建常 一种高效标签式数据分析方法及分析***
CN112286557B (zh) * 2020-11-05 2024-03-22 苏州帝博信息技术有限公司 一种非覆盖式更新代码内容的方法和装置
CN112286557A (zh) * 2020-11-05 2021-01-29 苏州帝博信息技术有限公司 一种非覆盖式更新代码内容的方法和装置
CN112860362A (zh) * 2021-02-05 2021-05-28 达而观数据(成都)有限公司 一种机器人自动化流程的可视化调试方法及调试***
CN112860362B (zh) * 2021-02-05 2022-10-04 达而观数据(成都)有限公司 一种机器人自动化流程的可视化调试方法及调试***
CN113110874A (zh) * 2021-04-14 2021-07-13 北京沃东天骏信息技术有限公司 用于生成代码结构图的方法和装置
CN113110874B (zh) * 2021-04-14 2024-05-17 北京沃东天骏信息技术有限公司 用于生成代码结构图的方法和装置
CN114840196A (zh) * 2022-07-06 2022-08-02 中国汽车技术研究中心有限公司 Modelica语言模型处理方法、设备和存储介质
CN115840751A (zh) * 2023-02-21 2023-03-24 山东经伟晟睿数据技术有限公司 一种新型树状数据的编码方法

Also Published As

Publication number Publication date
CN103645986B (zh) 2016-08-17

Similar Documents

Publication Publication Date Title
CN103645986A (zh) 一种编译器的可视化语法树的生成方法和重构方法
CN105335412B (zh) 用于数据转换、数据迁移的方法和装置
CN104298588B (zh) 一种持续集成的实现方法及装置
Sarhan et al. A survey of challenges in spectrum-based software fault localization
US5862382A (en) Program analysis system and program analysis method
CN102567201A (zh) 跨模型的图形用户界面测试脚本自动修复方法
US20160306736A1 (en) Translation verification testing
CN108279885B (zh) 一种对多个模型代码进行软件集成的方法及装置
CN104391731B (zh) 一种基于c#的与数据类型无关的编辑方法
CN109740122A (zh) 思维导图用例文件的转换方法及装置
CN107153606A (zh) 一种程序分析过程可视化方法及***
WO2014145818A1 (en) A graphic user interface based network management system to define and execute troubleshooting procedure
Nichols Augmented bug localization using past bug information
CN107015903A (zh) 一种界面测试程序的生成方法、装置及电子设备
CN103761095A (zh) 一种生成通用的升级文件头部数据信息的方法
CN101201740A (zh) 基于过程模型的测试用例生成方法
Kleebaum et al. Continuous rationale visualization
Kaliappan et al. Improving consistency of uml diagrams and its implementation using reverse engineering approach
CN115080448A (zh) 一种软件代码不可达路径自动检测的方法和装置
CN106155665A (zh) 符合性举证***及方法
CN106469050B (zh) 一种用例生成方法、页面生成方法及装置
Chen et al. T-star: a text-based istar modeling tool
Chaturvedi Automated web service change management AWSCM-A tool
CN113220800B (zh) 基于antlr的数据字段血缘分析方法及装置
Saddler EventFlowSlicer: A Goal-based Test Case Generation Strategy for Graphical User Interfaces

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CB03 Change of inventor or designer information

Inventor after: Liu Chenhu

Inventor after: Jiang Guojin

Inventor after: Bai Tao

Inventor after: Sun Yongbin

Inventor after: Zhou Tao

Inventor after: Huang Taixin

Inventor after: Liu Honggang

Inventor after: Ning Dai

Inventor after: Ji Jianwei

Inventor before: Liu Chenhu

Inventor before: Zhou Tao

Inventor before: Huang Taixin

Inventor before: Liu Honggang

Inventor before: Ji Jianwei

CB03 Change of inventor or designer information