高级语言代码的生成方法及其产生器的制作方法

文档序号:6423595阅读:188来源:国知局
专利名称:高级语言代码的生成方法及其产生器的制作方法
技术领域
本发明涉及电子设计自动化(Electronic Design Automation, EDA)软件工具的验证和自动代码生成领域,尤其涉及在高层次综合设计工具开发的验证流程中的一种高级语言代码产生器及高级语言代码生成方法。
背景技术
集成电路设计的EDA技术开始于20世纪70年代。最早在电路设计方面出现了 SPICE (Simulation program with integrated circuit emphasis,通用模拟电路仿真器), 在版图制作方面由手工绘图转变为计算机绘图;20世纪80年代初出现了逻辑仿真器和自动布局布线工具;20世纪80年代末出现了 RTURegister Transfer Level,寄存器传输级) 级设计仿真和逻辑综合工具,以及形式验证和静态时序分析工具;现在的第四代EDA工具主要包括重复利用设计、图形的状态图输入、算法综合、软硬件互补设计等。从EDA的发展趋势可以看出,现在的辅助设计逐渐向算法级和系统级转化。这也是为应对现在集成电路设计公司对快速开发和快速上市等需求的必然走向。随着算法描述抽象层次的提高,使用高级语言设计系统的优势更加明显,设计者可以快速而简洁地构建功能函数,通过标准库和函数调用技术,创建更复杂高速的系统。目前,EDA设计工具支持从高级语言的算法描述直接映射出对应的电路结构,但从高级语言算法描述映射到对应的电路结构过程中,通常难以保证在该EDA设计工具支持的高级语言语法范围内的各种形式的算法代码描述的正确转换。

发明内容
本发明要解决的主要技术问题是,提供一种高级语言代码产生器及高级语言代码生成方法,通过本发明的高级语言代码产生器,及高级语言代码产生方法生成的高级语言代码精简,有良好的相关性和随机性,使得更自然地模拟实际算法代码,从而提供测试或者验证时所需的符合要求的高级语言代码测试用例,并且保证产生的高级语言代码测试用例的直接可执行性,从而减轻了人工编写测试代码的压力。为解决上述技术问题,本发明采用的技术方案如下—种高级语言代码产生器,包括语法配置模块,用于接收输入的电子设计自动化工具的语法支持情况描述信息, 并将所述语法支持情况描述信息转换为相应的语法配置表;控制参数提取模块,用于接收输入的验证或者测试策略的策略级描述信息,并将所述验证或者测试策略的策略级描述信息转化为相应的控制约束表;高级语言语法库,用于将需要的高级语言的所有语法和词法元素描述进行存储;语法树生成模块,与所述语法配置模块、高级语言语法库和控制参数提取模块相连,用于根据所述语法配置模块生成的语法配置表,以及所述参数提取模块生成的控制约束表,调用所述高级语言语法库中的语法和词法元素,并生成相应的语法树;
代码生成模块,与所述语法树生成模块相连,用于将所述语法树生成模块生成的语法树转换为相应的可执行高级语言代码文件。进一步地,所述代码生成模块还用于根据所述语法树,生成对应于所述可执行高级语言代码文件的高级语言代码特性描述文件,则所述代码生成模块,包括代码构建子模块,与所述语法树生成模块相连,用于将所述语法树生成模块生成的语法树进行遍历读取,生成对应的可执行高级语言代码文件;代码特性提取子模块,与所述代码构建子模块和符合度检测模块相连,用于在所述代码构建子模块遍历读取所述语法树的同时记录产生的可执行高级语言代码的特性,并产生相应的高级语言代码特性描述文件。更进一步地,当用户需要特定标注或注释信息时,所述代码构建子模块还用于在标准语言基础上增加其他信息量标注的接口。更进一步地,所述高级语言代码产生器还包括符合度检测模块,与所述代码特性提取子模块和控制参数提取模块相连,用于根据所述高级语言代码特性描述文件,以及所述控制约束表进行符合度核对,如果所述高级语言代码特性描述文件满足所述控制约束表,则生成相应的符合度报告,并输出所述符合度报告、可执行高级语言代码文件和高级代码特性描述文件;如果所述高级语言代码特性描述文件不满足所述控制约束表时,则根据预先设置的允许的迭代次数,自动调整内部设置,重新生成新的可执行高级语言代码文件。进一步地,所述语法树生成模块包括子树集生成子模块,与所述语法配置模块、控制参数提取模块和高级语言语法库相连,用于根据所述语法配置表和控制约束表,以高级语言语法库中的语法或者词法元素的类标识或者实例为结点,生成相应的子树集;子树合并子模块,与所述语法配置模块、控制参数提取模块和子树集生成子模块相连,用于根据所述语法配置表和控制约束表,随机将各子树进行合并,得到新的子树集, 合并的条件为将要合并的两棵子树中的一棵子树的根结点与另一棵子树的叶结点类型相同;总语法树生成子模块,与所述子树合并子模块、语法配置模块和控制参数提取模块相连,用于将得到的新的子树集中结点最多的子树作为主树,其他子树作为附树,并根据所述语法配置表和控制约束表,按照自底向上延展的方向,随机对所述主树和附树进行多轮合并,得到对应的总语法树。更进一步地,其特征在于,所述语法配置表包括语法点支持信息、实现形式约束信息、特殊语法现象约束信息;所述控制约束表包括程序的流程布局信息、变量使用信肩、ο一种高级语言代码生成方法,包括根据输入的电子设计自动化工具的语法支持情况描述信息,生成相应的语法配置表;根据输入的验证或者测试策略的策略级描述信息,生成相应的控制约束表;根据所述语法配置表和控制约束表,调用高级语言语法库内的语法和词法元素, 并通过语法树构建方法构建相应的语法树;
将所述语法树转换为相应的可执行高级语言代码文件。进一步地,将所述语法树转换为相应的可执行高级语言代码文件包括遍历读取所述语法树,生成相应的可执行高级语言代码文件;当设定了特定标注或注释信息时,在所述可执行高级语言代码文件中生成对应于所述特定标注或注释信息的高级语言代码。更进一步地,所述方法还包括遍历读取所述语法树的同时,记录生成的可执行高级语言代码的特性,并生成相应的高级语言代码特性描述文件;检测所述高级语言代码特性描述文件是否满足所述控制约束表,如果满足,则生成并输出相应的符合度报告,同时输出所述可执行高级语言代码文件和高级语言代码特性描述文件;否则进行相应的调整,并生成新的可执行高级语言代码文件。更进一步地,所述语法树构建方法包括根据所述控制约束表和语法配置表,以语法或者词法元素的类标识或者实例为结点,随机生成相应的基本子树集;根据所述控制约束表和语法配置表,随机将各子树进行合并,生成新的子树集, 合并的条件为将要合并的两棵子树中的一棵子树的根结点与另一棵子树的叶结点类型相同;将结点最多的子树作为主树,其它子树作为附树,根据所述控制约束表和语法配置表,按照自底向上延展的方向,随机对所述主树和附树进行多轮合并,生成相应总语法树。本发明的有益效果是本发明的高级语言代码生成器,通过语法配置模块将输入的语法支持情况描述信息转换为相应的语法配置表;再通过控制参数提取模块将输入的验证或者测试策略转换为相应的控制约束表;再由语法树生成模块根据该语法配置表和控制约束表,调用高级语言语法库中的语法和词法元素,构建对应的语法树,再由代码生成模块将生成的语法树转换为对应的可执行代码,同时生成可执行代码特性描述文件。由于语法树生成模块构建的语法树,能够满足控制约束条件,能够保证代码的可行性。本发明的高级语言代码生成器生成的高级语言代码,有良好的相关性和随机性,保证了代码的精简性,使得能够更自然地模拟实际算法代码,从而为保证EDA设计工具对各种代码描述的转换的正确性提供了优质的测试用例,从而减轻了人工编写测试代码的压力。另一方面,由于高级语言语法库可以根据不同EDA工具支持语言的不同进行修改,以支持其他语言形式,从而提高了代码产生器的可扩展性。同时本发明的高级语言代码生成器还生成相应的高级语言代码特性描述文件,用户可直接通过该高级语言代码特性描述文件了解产生的可执行高级语言代码的特性,从而便于检查自己的验证或测试策略是否与产生的代码对应,即将验证或测试人员的关注点从测试代码的编写转移到验证或测试的策略上来,并为以高级语言为起点的转换或综合工具提供测试或验证时所需要的符合各自设计特点的全面的测试用例,同时可以根据该可执行文件的特性描述指导验证或测试策略的实施,进而进一步减轻了人工编写代码的压力。本发明的高级语言代码生成器还可通过符合度检测模块来检测产生的高级语言代码是否符合需要,当产生的高级语言代码有问题时,再由该符合度检测模块在允许迭代次数内,自动调整内部设置,重新产生新的高级语言代码,并且该迭代次数上限可设置,即是说本发明的高级语言生成器通过设置了符合度检测模块,从而使得该高级语言代码产生器能够进行自检。本发明的高级语言代码生成方法,通过将输入的语法支持情况描述信息和验证或者测试策略的策略级描述信息,分别转换为相应的语法配置表和控制约束表,再根据该语法配置表和控制约束表,调用语法库内的语法和词法元素,并通过语法树构建方法构建相应的语法树,再通过遍历读取该语法树生成相应的可执行高级语言代码和高级语言代码特性描述文件,从而将验证或测试人员的关注点从测试代码的编写转移到验证或测试的策略上来,避免了使用现成的算法代码时,语法现象不全,测点不明确,调试定位不方便的问题; 同时,由于所构建的语法树,均满足控制约束表,使得由该语法树转换得到的高级语言代码,有良好的相关性和随机性,并且生成的高级语言代码精简,减少了无关代码,从而使得能够更自然地模拟实际算法代码,保证了产生的高级语言代码测试用例的直接可执行性, 进而减轻了人工编写代码的压力。另一方面,本发明的高级语言代码生成方法中,语法树的构建方法通过随机将子树合并为主树的方式,再随机将主树和附树按照向上延展的方向来合并,生成总语法树。由于每棵子树都满足控制约束条件,使得在子树合并成主树的过程中可控性增加;并且由子树集合并到总语法树的过程中,子树的总数目逐渐减少,最终收敛为一棵树,从而使得可以在尽量少的代码量下达到相应要求,且在满足控制约束条件的前提下尽快收敛,进而提高了由该语法树转换得到的代码的相关性和随机性,使得能够更自然地模拟实际算法代码。


图1为本发明的高级语言代码生成器的一实施例的结构示意图;图2为本发明的代码生成模块的一实施例的结构示意图;图3为本发明的高级语言代码生成方法的一实施例的流程图;图4a、图4b和图如分别为本发明的高级语言代码生成方法的一实施例中语法配置表的语法点支持信息、实现形式约束信息和特殊语法现象约束信息的示意图;图fe和图恥分别为本发明的高级语言代码生成方法的一实施例中变量使用信息和程序流程布局的示意图;图6为本发明的语法树构建方法的一实施例的流程图;图7a、图7b和图7c分别为本发明的语法树构建方法的一实施例中生成子树集的示意图,合并子树集生成新的子树集的示意图,以及生成总语法树的示意图。
具体实施例方式下面通过具体实施方式
结合附图对本发明作进一步详细说明。请参考图1,为本实施方式的高级语言代码产生器的一实施例的结构示意图。本实施方式的高级语言代码产生器,包括语法配置模块1,用于接收输入的EDA设计工具的语法支持情况描述信息,并将该语法支持情况描述信息转换为相应的语法配置表;控制参数提取模块2,用于接收输入的验证或者测试策略的策略级描述信息,并将该验证或者测试策略的策略级描述信息转化为相应的控制约束表;高级语言语法库3,用于将需要的高级语言的所有语法和词法元素描述进行分类存储;语法树生成模块4,与语法配置模块1、高级语言语法库3和控制参数提取模块2相连,用于根据语法配置模块1生成的语法配置表,以及参数提取模块2生成的控制约束表,调用高级语言语法库中的语法和词法元素,以生成相应的语法树;代码生成模块5,与语法树生成模块4相连,用于遍历读取该语法树生成模块4生成的语法树,生成相应的可执行高级语言代码文件。通常我们将高级语言语法标准中定义的允许出现的语法现象,称为标准语言。目前各种高级语言语法标准中,由于某些语法的支持难度较大,因此,EDA设计工具会选择支持某些语法点,而放弃支持另一些语法点,即支持一个小于标准语法集合的小集合,甚至还有在此基础上自定义的一些独特语法。本实施方式中的语法支持情况描述信息是指,EDA设计工具允许用户在编程时使用的语法,即该EDA设计工具可以支持的范围。本实施方式中的策略级描述信息是相对于代码级而言的,即以较为抽象的形式对如何产生测试点的策略进行描述,例如伪代码,或者流程图等,而不是以代码的形式来描述。本实施方式中,由语法配置模块1生成的语法配置表包括语法点支持信息、实现形式约束信息、特殊语法现象约束信息;由控制参数提取模块2生成的控制约束表包括程序的流程布局信息、变量使用信息。本实施方式的高级语言代码生成器通过语法配置模块1将接收的输入的语法支持情况描述信息转换为相应的语法配置表,从而通过语法配置表中的语法配置、实行形式限制、特殊语法现象标注,实现语法约束的粗调、细调和微调;再通过控制参数提取模块2 将输入的验证或者测试策略转换为相应的控制约束表,从而将测试或验证人员的思路转化成数字参数列表形式,形成友善的用户接口 ;再由语法树生成模块4根据该语法配置表和控制约束表,调用高级语言语法库中的语法和词法元素,构建对应的语法树,再由代码生成模块5将生成的语法树转换为对应的可执行代码,由于构建的语法树满足控制约束表,语法配置表,并符合相应高级语言语法和词法规则,从而由语法树转换得到的高级语言代码相关性提高,使得能够更自然地模拟实际算法代码,进而保证了生成的高级语言代码的可执行性,以降低人工编写代码的压力。另一方面,由于高级语言语法库可以根据不同EDA工具支持语言的不同进行修改,以支持其他语言形式,从而提高了高级语言代码产生器的可扩展性。本实施方式的高级语言代码产生器的代码生成模块5还用于在遍历语法树生成可执行高级语言代码时,记录生成的可执行高级语言代码的特性,从而生成相应高级语言代码特性描述文件。本实施方式的高级语言产生器还包括与代码生成模块5和控制参数提取模块2相连的符合度检测模块6,用于将代码生成模块5生成的高级语言代码特性描述文件,与控制参数提取模块2生成的控制约束表进行符合度核对,如果高级语言代码特性描述文件满足控制约束表,则生成相应的符合度报告,并输出符合度报告、可执行高级语言代码文件和高级语言代码特性描述文件;否则根据预先设置的允许的迭代次数,自动调整内部设置,重新生成新的可执行高级语言代码文件。本实施方式的高级语言代码产生器,通过代码生成模块生成对应的高级语言特性描述文件,使得用户可以根据该高级语言特性描述文件,检测生成的高级语言代码是否符合需要。另一方面,通过将高级语言特性描述文件与由验证或者测试策略的策略级描述信息转化得到的控制约束表进行核对,来检测产生的代码是否符合需要,从而将验证或测试人员的关注点从测试代码的编写,转移到验证或测试的策略上来,并为以相应高级语言代码为起点的转换或综合工具提供测试或验证时所需要的符合各自设计特点的全面的测试用例,避免了使用现成的算法代码时,语法现象不全,测点不明确,调试定位不方便,进而减轻了编写代码的压力。同时,当产生的高级语言代码有问题时,可通过在符合度检测模块6 在允许迭代次数内,自动调整内部设置,重新产生代码,并且该迭代次数上限可设置,即是说本实施方式的代码产生器可以通过该符合度检测模块6进行自检。请参考图2,为本实施方式的代码生成模块5的一实施例的结构示意图。本实施方式的代码生成模块5包括与语法树生成模块4相连的代码构建子模块51,以及与代码构建子模块51和符合度检测模块6相连的代码特性提取子模块52。其中,代码构建子模块51 用于将语法树生成模块4构建好的语法树进行遍历读取,并生成可执行的高级语言代码文件;代码特性提取子模块52用于在代码构建子模块51遍历读取语法树的同时记录产生的可执行高级语言代码的特性,并产生相应的高级语言代码特性描述文件。同时本实施方式中,当用户需要特定标注或者注释信息时,该代码构建子模块51 提供在标准语言基础上增加其他信息量标注的接口,即可以输出用户需要的含特定标注或注释信息对应的代码。由于某些EDA工具为了其各自的用途,而在某些语法标准之外,定义了该EDA工具自己可以识别的,用于特定用途的语法现象,因此,需要在产生代码的时候加入这些不通用的语法内容。基于上述的高级语言代码生成器,本实施方式还提供一种高级语言代码生成方法,下面结合具体实施例和附图对本实施方式的高级语言代码生成方法进行详细的说明。请参考图3,为本实施方式的高级语言代码生成方法的一实施例的流程图。以C语言为例,本实施方式的高级语言代码生成方法包括S101,根据输入的EDA设计工具的语法支持情况描述信息,生成相应的语法配置表。本实施方式中,生成的语法配置表包括语法点支持信息、实现形式约束信息、特殊语法现象约束信息等,且语法配置表会对一些信息设定默认约束值。本实施方式中,通过将语法支持情况描述信息转换为相应的语法配置表,从而通过语法配置、实行形式限制、特殊语法现象标注的机制实现语法约束的粗调、细调和微调。请参考图4a、图4b和图4c,分别为本实施方式中语法配置表中语法点支持信息、 实现形式约束信息和特殊语法现象约束信息的示意图。其中,语法点支持信息包括了对数据类型、运算符类型等语法点的支持情况,即在语法配置表的语法点支持信息表格上,将相应的选项打钩(或Y/N)即可;实现形式约束信息包括循环嵌套次数、条件嵌套次数等信息的约束情况,在已有的实现形式约束信息表格上完成限制的输入即可;特殊语法现象约束信息指在有较特殊的语法限制条件下填写,并且在系统提供的特殊语法现象描述规则的基础上填写,表述严谨。请参考图如,本实施方式的一实施例中,特殊语法现象约束信息中第一条表示“如果出现双目运算符构成的表达式,则双目运算符左右两边的数据类型不能同时为常数,并且必须数据类型一致”;第二条表示“如果出现双目运算符构成的表达式,则当双目运算符是移位运算时,移位运算的第二个操作数的数据类型要为立即数”;第三条表示“如果出现声明语句,则当声明语句使用逗号完成连续声明时,不允许出现一些初始化一些不初始化的现象”。S103,根据输入的验证或者测试策略的策略级描述信息,生成相应的控制约束表。本实施方式中的策略级描述信息是相对于代码级而言的,即以较为抽象的形式对如何产生测试点的策略进行描述,例如伪代码,或者流程图等,而不是以代码的形式来描述。本实施方式通过将验证或者测试策略的策略级描述信息转换为相应的控制约束表,将测试或验证人员的思路转化成数字参数列表形式,形成了友善的用户接口,便于工程师之间的交流。本实施方式中,生成的控制约束表包括程序的流程布局信息、变量使用信息等。 请参考图5a,为本实施方式的一实施例中变量使用信息的示意图,由于产生代码时可以以函数为单位,该变量使用信息可以包括在构造函数时对函数内变量总数的数量限制,优先使用变量的变量名、变量类型、变量初值、作用域等信息。请参考图恥,为本实施方式的一实施例中程序的流程布局信息示意图,该程序的流程布局信息可以包括各语法点的位置安排,例如其中while语句中插入if语句;各语法点属性的设置,例如其中对赋值语句assigr^tatement出现的数量属性amount进行设置; 以及插入指定代码,例如其中“i_count+ = i_refa; ”为插入指定代码等。S105,根据生成的语法配置表和控制约束表,调用相应语法库内的语法和词法元素,并通过语法树构建方法构建相应的语法树。请参考图6,本实施方式的语法树构建方法包括S1051,根据控制约束表和语法配置表,以语法或者词法元素的类标识或者实例为结点,随机生相应的基本成子树集。本实施方式中,为了保证语法树中必须存在用户选择的语法点,首先读入用户需求,以用户选择的基本语法点为主要框架,向上或者向下延展,使得产生包含该基本语法点的子树的可合并结点增多,提高生成的各子树之间的可合并性,从而使得由该子树构成的基本子树集的各子树更容易完成到语法树的合并。请参考图7a,本实施方式的一实施例中,需要产生的代码中包括两个if结构和两个for结构,则根据控制约束表和语法配置表生成四个独立的结点ifstat,ifstat, forstat, forStat0然而这四个独立的结点不能直接进行合并,因此,我们先对这四个结点进行向上或向下延展,使得由这四个独立结点延展出的树的可合并结点增多,提高各树之间的可结合性,从而更容易完成到语法总树的合并。由于C语言产生式中,所有的ifstat 和forstat都必须由stat推出,即所有的ifstat和forstat的父结点都必须是结点stat, 而且结点stat在C语言产生式中出现的概率更高,即在合并时的可结合率更高,所以这里的四个结点都向上延展一步,从而得到两棵包含if结构的子树101和子树102,以及两棵包含for结构的子树103和子树104,即得到相应的基本子树集。本实施方式中,一棵语法树只有一个根结点,但是可以有很多个叶结点,且在构建语法树或者总语法树时,对需要确定结点类型或者结点内容的结点,并且该结点的内容或者类型在经过语法配置约束后的规则上又是可选的情况下,再根据随机函数,在可选范围内进行随机选择。本实施方式中,随机函数是指在指定范围内产生一个随机的数,由该随机数来决定C语言产生式的可能产生的子树的棵数,高级语言通常都会提供随机函数。例如,C语言产生式里有block- > Statn,即block可以推出η个stat (η彡0),而这个η的具体数值, 则由随机函数产生的一个随机数来确定。本实施方式中的随机函数是可以被多次调用,而每次根据不同的需要,调用的随机函数产生的随机数都不重复使用,即每次产生的随机数都不同,但随机函数每次被调用时,都会有一个最大值,这个最大值限制了随机数的产生范围。例如最大值是7,那么随机函数产生的随机值就只能是0到6中的任一个。S1053,根据控制约束表和语法配置表,随机将子树进行多轮合并,生成新的子树集,其中,合并的条件为将要合并的两棵子树中的一棵子树的根结点与另一棵子树的叶结点类型相同。本实施方式中,对在每一步向上延伸的过程中,新的根结点可根据产生式要求随机确定,且延伸过程中,获得的非叶结点,即非终结符,以新的结点作为搜索条件搜索能够进行合并的子树。请参考图7b,随机将图7a中的各子树进行合并,生成新的子树集包括首先,由于
可推出 stat 的产生式集为{block- > statn, ifStat- > if (expr) stat,......},则通过
随机函数获得第二个产生式if^tat-> if(eXpr)Stat,即子树101的叶结点ifstat可推出 if (expr) stat,由于推出后的该叶结点stat与子树103的根结点stat类型相同,因此合并子树101和103获得子树201,第一轮合并结束。当然,本实施例中的子树101,子树102,子树103和子树104都可以相互合并。但进行具体合并操作时,会统计各个子树间的合并可能性,并根据合并的可能性,由随机函数来产生的一个随机数来确定具体将哪两棵子树进行合并。例如子树间可合并的方案有M 个,那么随机函数输入值就是M,若输出为N则0 = < N < M,得出的数值表示调用第N个方案。例如本实施例中当随机函数产生的值为0时,则将子树101和子树102合并;当随机函数产生的值为1时,则将子树101和子树103合并。本实施方式中,expr (表达式)和不含嵌套的stat (—般语句)等简单结构可以以自顶向下的形式随机生成。为了协助更快地生成随机附树,在子树集中需要产生足够的 expr (表达式)和stat ( 一般语句)。本实施方式中,当存在某种语法的嵌套时,所允许的嵌套层数如果用户没有指定, 则在建树前需要对其进行确定,可随机确定或者默认设置。例如在程序开始的时候,由随机函数获得随机数3 (这个数字可以由用户直接设定,或者取一个默认值),则确定嵌套层数为3,即不允许stat向下的各条路径中任何一条路径上出现3个以上的stat ;如果在程序开始,获得随机数0,则在stat往后推导的过程中,就不能再出现stat,且任何一条由根结点到叶结点的完整路径,某种语法的嵌套层数都可以通过统计该路径上出现的相同的该语法类型结点的数目来计算。其次,这里可以选择block或者forstat等作为该子树201的新的根结点,本实施例中选择由block作为新的根结点,则运行随机函数获得产生式block-> stat stat,且由该产生式推出的两个stat中的新的stat为非终结符,则以该非终结符stat为新的结点搜索能够进行合并的附树,则搜索到根结点为stat的子树104和子树102,再根据随机函数产生的随机数决定将子树201与子树104合并,从而合并子树201和子树104,获得子树202,
第二轮合并结束。本实施例中,子树201可与子树102或者子树104进行合并,但由随机函数确定该子树201与子树102合并或者与子树104进行合并。最后,由于子树102的根结点/叶结点,不能在子树202中寻找到相应可合并的叶结点/根结点,因此,不能够进行合并,得到新的子树集子树202和子树102。S1055,将结点最多的子树作为主树,其它子树作为附树,对主树进行自底向上延展,随机地进行多轮合并,生成相应的总语法树。请参考图7c,为本实施方式的将主树和附树进行合并,生成总语法树的一实施例的示意图。本实施方式的一具体实施例中,将主树和附树进行合并,生成总语法树包括根据上述的合并结果,选择结点数较多的子树202作为主树,子树102作为附树进行新一轮合并令主树202向上延伸,通过随机函数获得产生式stat- > block,则主树202的根结点变成stat ;然后,通过随机函数获得产生式if^tat- > if(expr)stat,即由子树102中的 if Mat推出if (expr) stat ;由于该子树102推出后的该叶结点stat与主树202的根结点 stat类型相同,则将主树202和子树102合并,则所有子树合并完毕。请参考图7c,附树与主树合并后得到子树301,该子树中的结点expr为非终结符, 由于附树中不存在以expr为根结点的子树,所以将随机产生一棵以结点expr为根结点的附树,然后再将这棵附树合并到主树301的结点expr中;同时由于子树301的根结点已经是树的顶点了,所以结点expr就需要不断向下延展,将其自身补全。本实施方式中的终结符为语言里最基本的元素,即不能够进一步分解,如图 7c中,由于ifstat可以推出if(expr)stat,因此,其不为终结符;而由ifstat推出的 if (expr) stat中,由于“if”、“(”和“)”不能够再推出别的元素,即为终结符。本实施方式中,当只有一棵主树时,选择最短路径到达function根结点。在本实施例中,由于只有一棵主树202,则在该主树202向上延伸的过程中,不再选用随机产生式, 而是向前探测最短到达function的路径,最后通过产生式block- > stat, function- > type ID(formalParameter)block获得子树301,至此,以funtion为根结点的子树,即语法树构建完毕。本实施例中一棵语法树只代表一个函数,在完整代码的产生过程中,生成的语法树总棵数由函数个数来决定。当然当附树不仅仅只有子树102 —棵时,则在将附树102与主树202合并后,再将其余的附树随机进行多轮合并,且以自底向上延展的主要方式,最终得到总的语法树。本实施方式中,每一次对主树进行向上延展的过程中,新的根结点可根据产生式要求随机确定,且在延伸过程中,获得非叶结点,即非终结符,则以该新的非终结符作为搜索条件搜索能够进行合并的附树,如果符合条件的附树不存在,则可以随机产生符合条件的附树进行合并。本实施方式中,随机对各子树进行多轮合并,并向上延展生成总语法树过程中,必须以满足控制约束表上的条款为目的,以语法配置表为限制,符合C语言语法和词法规则,运用合理的带约束的随机机制,以自底向上延展为主要方式,生成符合用户需求的语法树, 且主树每一次向上延展之前,都必须保证所有的叶结点都是终结符,否则以该非终结符为搜索条件搜索能够合并的附树进行合并或者随机产生符合条件的附树进行合并,即结合不含嵌套的向下补全方式来产生符合要求的语法树。本实施方式中采用向上延展,向下补全缺少结点的方式来构建语法树,可以很好地控制嵌套次数等约束条件的实施,同时,对主树采用自底向上延展的方式,以产生更多需要补全的结点,这样才能根据附树的根结点的情况,将附树合并到主树上,最后收敛为一棵总语法树,并且由于合并时,必须满足附树的根结点与主树上需要补全的叶结点的类型相同,因此,只有作为终结符的结点作为叶结点时,才不需要继续补全。如果不能够使用现有的附树将主树补全,则根据随机函数产生需要的相应子树来补全。当然,本实施方式中的将主树与附树进行多轮合并时,也可以按照向下延展的方向,但最后都需要将缺少的结点补充完整,才能构成完整的语法树。本实施方式中,构建语语法树过程中,当C语言产生式可能产生的相同子树的棵数不确定时,子树的棵数由随机函数决定,随机数的最大值由当前附树的棵数决定;另外, 如果if,while等主要语句出现的最大次数用户没有指定,则在建语法树前对其进行确定, 可随机确定或者默认设置。本实施方式通过由子树组建主树,并最终合并为总语法树的过程中,由于每一棵子树都必须满足控制约束表,从而使得由子树组建语法树的过程中可控性增加,且快速收敛为总语法树,进而使得生成的总语法树满足控制约束表,且使得由该总语法树转换的高级语言代码的也满足要求,且产生的代码量较少,相关性较好,提高生成的高级语言代码的有效价值。S107,遍历读取语法树,并生成相应的可执行高级语言代码文件。本实施方式中,如果用户设定了特定标注或者注释信息时,还在该可执行高级语言代码生成对应于该特定标注或者注释信息的可执行高级语言代码,以提供在标准语言基础上增加其他信息量标注的接口。S109,遍历读取语法树的同时,记录生成的高级语言代码的特性,并生成相应的高级语言代码特性描述文件。本实施方式通过记录生成的高级语言代码的特性,生成相应的高级语言代码特性描述文件,从而使得用户通过高级语言代码特性描述文件了解产生的高级语言代码的特性,进而便于检查自己的验证或测试策略是否与代码对应,同时可以根据该高级语言特性描述文件中高级语言代码的特性描述,指导验证或测试策略的实施,减轻了人工编写代码的压力。S1011,根据该高级语言代码特性描述文件,检测该高级语言代码特性描述文件是否满足控制约束表,如果满足,则执行步骤S1013a ;否则执行步骤SlOUb。S1013a,生成并输出相应的符合度报告,同时输出可执行高级语言代码文件和高级语言代码特性描述文件。S1013b,进行相应的调整,并生成新的可执行高级语言代码文件。本实施方式,通过核对高级语言代码特性描述文件是否满足控制约束表,来判断生成的可执行高级语言代码是否符合需要,当符合需要时,则输出相应的可执行高级语言代码、高级语言代码特性描述文件和符合度报告;当不符合需要时,则在允许迭代次数前提下,自动调整相应的设置,重新生成新的可执行高级语言代码。本实施方式的高级语言代码生成方法,首先,将输入的语法支持情况描述信息和验证或者测试策略的策略级描述信息,分别转换为相应的语法配置表和控制约束表;其次, 根据该语法配置表和控制约束表,调用语法库内的语法和词法元素,并通过语法树构建方法构建相应的语法树;再者,通过遍历读取该语法树,生成相应的可执行高级语言代码文件;同时记录生成的高级语言代码文件的特性,生成相应的高级语言代码特性描述文件,同时,本实施方式通过构建语法树,再将其转换为相应的可执行高级语言代码,由于该语法树满足控制约束表的要求,使得由子树到总语法树的组建过程中可控性增加,且尽快在满足控制约束条件的前提下收敛,从而使得在满足用户控制条件的前提下产生的代码精简,且有良好的相关性和随机性,使得更自然地模拟实际算法代码,保证了产生的高级语言代码测试用例的直接可执行性,进而减轻了人工编写代码的压力。以上内容是结合具体的实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
权利要求
1.一种高级语言代码产生器,其特征在于,包括语法配置模块,用于接收输入的电子设计自动化工具的语法支持情况描述信息,并将所述语法支持情况描述信息转换为相应的语法配置表;控制参数提取模块,用于接收输入的验证或者测试策略的策略级描述信息,并将所述验证或者测试策略的策略级描述信息转化为相应的控制约束表;高级语言语法库,用于将需要的高级语言的所有语法和词法元素描述进行存储; 语法树生成模块,与所述语法配置模块、高级语言语法库和控制参数提取模块相连,用于根据所述语法配置模块生成的语法配置表,以及所述参数提取模块生成的控制约束表, 调用所述高级语言语法库中的语法和词法元素,并生成相应的语法树;代码生成模块,与所述语法树生成模块相连,用于将所述语法树生成模块生成的语法树转换为相应的可执行高级语言代码文件。
2.如权利要求1所述的高级语言代码生成器,其特征在于,所述代码生成模块还用于根据所述语法树,生成对应于所述可执行高级语言代码文件的高级语言代码特性描述文件,则所述代码生成模块,包括代码构建子模块,与所述语法树生成模块相连,用于将所述语法树生成模块生成的语法树进行遍历读取,生成对应的可执行高级语言代码文件;代码特性提取子模块,与所述代码构建子模块和符合度检测模块相连,用于在所述代码构建子模块遍历读取所述语法树的同时记录产生的可执行高级语言代码的特性,并产生相应的高级语言代码特性描述文件。
3.如权利要求2所述的高级语言代码产生器,其特征在于,当需要特定标注或注释信息时,所述代码构建子模块还用于在标准语言基础上增加其他信息量标注的接口。
4.如权利要求2所述的高级语言代码产生器,其特征在于,还包括符合度检测模块,与所述代码特性提取子模块和控制参数提取模块相连,用于根据所述高级语言代码特性描述文件,以及所述控制约束表进行符合度核对,如果所述高级语言代码特性描述文件满足所述控制约束表,则生成相应的符合度报告,并输出所述符合度报告、可执行高级语言代码文件和高级代码特性描述文件;如果所述高级语言代码特性描述文件不满足所述控制约束表时,则根据预先设置的允许的迭代次数,自动调整内部设置,重新生成新的可执行高级语言代码文件。
5.如权利要求1所述的高级语言代码产生器,其特征在于,所述语法树生成模块包括 子树集生成子模块,与所述语法配置模块、控制参数提取模块和高级语言语法库相连,用于根据所述语法配置表和控制约束表,以高级语言语法库中的语法或者词法元素的类标识或者实例为结点,生成相应的子树集;子树合并子模块,与所述语法配置模块、控制参数提取模块和子树集生成子模块相连, 用于根据所述语法配置表和控制约束表,随机将各子树进行合并,得到新的子树集,合并的条件为将要合并的两棵子树中的一棵子树的根结点与另一棵子树的叶结点类型相同;总语法树生成子模块,与所述子树合并子模块、语法配置模块和控制参数提取模块相连,用于将得到的新的子树集中结点最多的子树作为主树,其他子树作为附树,并根据所述语法配置表和控制约束表,按照自底向上延展的方向,随机对所述主树和附树进行多轮合并,得到对应的总语法树。
6.如权利要求1至5中任意一项所述的高级语言代码产生器,其特征在于,所述语法配置表包括语法点支持信息、实现形式约束信息、特殊语法现象约束信息;所述控制约束表包括程序的流程布局信息、变量使用信息。
7.一种高级语言代码生成方法,其特征在于,包括根据输入的电子设计自动化工具的语法支持情况描述信息,生成相应的语法配置表; 根据输入的验证或者测试策略的策略级描述信息,生成相应的控制约束表; 根据所述语法配置表和控制约束表,调用高级语言语法库内的语法和词法元素,并通过语法树构建方法构建相应的语法树;将所述语法树转换为相应的可执行高级语言代码文件。
8.如权利要求7所述的方法,其特征在于,将所述语法树转换为相应的可执行高级语言代码文件包括遍历读取所述语法树,生成相应的可执行高级语言代码文件; 当设定了特定标注或注释信息时,在所述可执行高级语言代码文件中生成对应于所述特定标注或注释信息的高级语言代码。
9.如权利要求8所述的方法,其特征在于,还包括遍历读取所述语法树的同时,记录生成的可执行高级语言代码的特性,并生成相应的高级语言代码特性描述文件;检测所述高级语言代码特性描述文件是否满足所述控制约束表,如果满足,则生成并输出相应的符合度报告,同时输出所述可执行高级语言代码文件和高级语言代码特性描述文件;否则进行相应的调整,并生成新的可执行高级语言代码文件。
10.如权利要求7至9中任意一项所述的方法,其特征在于,所述语法树构建方法包括根据所述控制约束表和语法配置表,以语法或者词法元素的类标识或者实例为结点, 随机生成相应的基本子树集;根据所述控制约束表和语法配置表,随机将各子树进行合并,生成新的子树集,合并的条件为将要合并的两棵子树中的一棵子树的根结点与另一棵子树的叶结点类型相同;将结点最多的子树作为主树,其它子树作为附树,根据所述控制约束表和语法配置表, 按照自底向上延展的方向,随机对所述主树和附树进行多轮合并,生成相应总语法树。
全文摘要
本发明公开了一种高级语言代码产生器及高级语言代码生成方法,通过将输入的EDA设计工具的语法支持情况描述信息和验证或测试策略分别转换为相应的语法配置表和控制约束表,再根据该语法配置表和控制约束表,调用相应的语法库构建语法树,再将该语法树转换为对应的可执行高级语言代码。由于构建的语法树满足语法配置表和控制约束表,保证了生成的高级语言代码的可执行性,并提高了代码的相关性,使得能够更自然地模拟实际算法代码,从而为保证各种EDA设计工具对各种代码描述的转换的正确性提供了优质的测试用例,且该测试用例可执行性良好,进而减轻了人工编写测试代码的压力。
文档编号G06F9/45GK102156655SQ20111011560
公开日2011年8月17日 申请日期2011年5月5日 优先权日2011年5月5日
发明者曹颖, 王新安, 王腾, 谢峥, 陈旭, 雍珊珊 申请人:北京大学深圳研究生院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1