CN110737466B - 基于静态程序分析的源代码编码序列表示方法 - Google Patents
基于静态程序分析的源代码编码序列表示方法 Download PDFInfo
- Publication number
- CN110737466B CN110737466B CN201910981926.6A CN201910981926A CN110737466B CN 110737466 B CN110737466 B CN 110737466B CN 201910981926 A CN201910981926 A CN 201910981926A CN 110737466 B CN110737466 B CN 110737466B
- Authority
- CN
- China
- Prior art keywords
- source code
- abstract syntax
- syntax tree
- original abstract
- text
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/36—Software reuse
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明提供了一种基于静态程序分析的源代码编码序列表示方法,包括:获取源代码文本;对源代码文本进行转换,以得到源代码文本对应的原始抽象语法树;对原始抽象语法树进行精简;对精简后的原始抽象语法树进行遍历编码,以得到源代码文本的编码序列表示。本发明能够简化源代码文本对应的原始抽象语法树的树形结构,并能够较好的将原始抽象语法树的树形结构转换为编码序列,同时能够保证编码序列具有较好的检索性能和匹配性能。
Description
技术领域
本发明涉及代码静态程序分析技术领域,具体涉及一种基于静态程序分析的源代码编码序列表示方法。
背景技术
在软件行业中,通常将能够完成既定功能的编程语言有序集合作为代码段,因此在软件行业中具有大量代码段。并且随着软件行业的发展,私有代码库和开源软件项目的快速增加进一步积累了大量能实现各种功能的代码段,因此,在目前的软件开发中,对现有代码段的有效复用,已成为一种快速高效的软件开发活动。如何从现有代码库中找到符合开发人员需求的已有代码段,并通过复用和修改来加速软件开发过程,是代码推荐的主要工作;如何找出代码中的克隆关系,提高复用代码的维护效率、降低其维护成本,是代码克隆检测的主要应用场景。在代码推荐、代码克隆检测等领域,如何对代码段进行有效表达,是影响代码推荐和克隆检测效果的重要影响因素。
目前广泛应用的代码表示方法有基于符号、基于抽象语法树、基于图结构等方法。其中,基于符号的方法是将代码段切分成具有符号表意的有序序列,将代码语句中的每一个用于表示同一意义的连续字符作为一个符号表示,并组合为有序的符号序列来表达完整的代码段;基于抽象语法树的方法是将代码段解析为抽象语法树,用节点类型和树形结构关系表示代码语句的意义和顺序,利用抽象语法树的节点及结构表达完整的代码段;基于图结构的方法是将程序解析为控制流图或数据依赖图等图结构,并利用图结构的相关信息来表达完整的代码段。
其中,更为常用的代码表示方法是基于抽象语法树的方法。这是因为基于抽象语法树的方法能够兼顾文本特征和程序语言顺序结构特征;而基于符号的方法主要使用了代码段中的文本特征,仅能利用语言中词的性质,却忽略掉了部分语义的信息,基于图结构的方法仅考虑了代码段中蕴含的关联关系表示,却忽略了程序语句的结构顺序和文本信息。
但是,目前在应用基于抽象语法树的方法时,大多直接使用抽象语法树,而忽略对抽象语法树的进一步处理,导致针对树结构的数据处理方法通常需要较多的计算资源和时间。
发明内容
本发明旨在至少在一定程度上解决上述技术中的技术问题之一。为此,本发明的目的在于提出一种基于静态程序分析的源代码编码序列表示方法,能够简化源代码文本对应的原始抽象语法树的树形结构,并能够较好的将原始抽象语法树的树形结构转换为编码序列,同时能够保证编码序列具有较好的检索性能和匹配性能。
为达到上述目的,本发明实施例提出了一种基于静态程序分析的源代码编码序列表示方法,包括:获取源代码文本;对所述源代码文本进行转换,以得到所述源代码文本对应的原始抽象语法树;对所述原始抽象语法树进行精简;对精简后的原始抽象语法树进行遍历编码,以得到所述源代码文本的编码序列表示。
根据本发明实施例的基于静态程序分析的源代码编码序列表示方法,通过获取源代码文本,然后对源代码文本进行转换,以得到源代码文本对应的原始抽象语法树,并对原始抽象语法树进行精简,最后对精简后的原始抽象语法树进行遍历编码,以得到源代码文本的编码序列表示,由此,能够简化源代码文本对应的原始抽象语法树的树形结构,并能够较好的将原始抽象语法树的树形结构转换为编码序列,同时能够保证编码序列具有较好的检索性能和匹配性能。
另外,根据本发明上述实施例提出的基于静态程序分析的源代码编码序列表示方法还可以具有如下附加的技术特征:
根据本发明的一个实施例,在所述源代码文本包含头文件申明行时,对所述源代码文本进行转换,以得到所述源代码文本对应的原始抽象语法树包括:对所述源代码文本进行预处理以删除所述源代码文本的所述头文件申明行;采用源代码分析工具解析并导出所述源代码文本对应的原始抽象语法树。
根据本发明的一个实施例,在所述源代码文本不包含头文件申明行时,对所述源代码文本进行转换,以得到所述源代码文本对应的原始抽象语法树包括:对所述源代码文本采用源代码分析工具解析并导出所述源代码文本对应的原始抽象语法树。
进一步地,所述头文件申明行包括“#include”字符串。
根据本发明的一个实施例,对所述原始抽象语法树进行精简包括:结合所述原始抽象语法树节点类型对所述原始抽象语法树的冗余信息进行删除。
进一步地,所述精简后的原始抽象语法树包括所述原始抽象语法树的树形结构和节点类型。
根据本发明的一个实施例,对精简后的原始抽象语法树进行遍历编码,以得到所述源代码文本的编码序列表示包括:对所述精简后的原始抽象语法树的所有节点类型进行顺序编码,以得到所述所有节点类型的类型编码;对所述精简后的原始抽象语法树的所有节点从根节点开始进行前序遍历,以得到所述所有节点的遍历顺序;根据所述遍历顺序对所述精简后的原始抽象语法树的所有节点结构进行编码,以得到所述所有节点结构的结构编码;对所述精简后的原始抽象语法树进行全文编码,并根据所述类型编码和所述结构编码对所述前序遍历的节点进行编码,以得到所述源代码文本的编码序列表示。
进一步地,所述编码序列同时包括所述类型编码和所述结构编码。
进一步地,所述源代码文本为C语言文本。
附图说明
图1为本发明实施例的基于静态程序分析的源代码编码序列表示方法的流程图;
图2为本发明一个实施例的对源代码文本进行转换的方法流程图;
图3为本发明一个实施例的对精简后的原始抽象语法树进行遍历编码的方法流程图;
图4为本发明一个具体实施例的C语言文本对应的原始抽象语法树文件;
图5为本发明一个具体实施例的C语言文本对应的精简抽象语法树文件;
图6为本发明一个实施例的抽象语法树的节点类型和节点层级的示意图;
图7为本发明一个实施例的抽象语法树文件的序列化表示;
图8为本发明一个实施例的抽象语法树节点类型编码列表;
图9为本发明一个实施例的编码序列表示。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例的基于静态程序分析的源代码编码序列表示方法。
如图1所示,本发明实施例的基于静态程序分析的源代码编码序列表示方法,包括步骤:
S1,获取源代码文本。
S2,对源代码文本进行转换,以得到源代码文本对应的原始抽象语法树。
具体地,在源代码文本包含头文件申明行时,如图2所示,对源代码文本进行转换,以得到源代码文本对应的原始抽象语法树包括步骤:
S201,对源代码文本进行预处理以删除源代码文本的头文件申明行。
具体地,可对源代码文本中包括“#include”字符串的头文件申明行进行删除。
S202,采用源代码分析工具解析并导出源代码文本对应的原始抽象语法树。
具体地,在源代码文本不包含头文件申明行时,对源代码文本进行转换,以得到源代码文本对应的原始抽象语法树包括:对源代码文本采用源代码分析工具解析并导出源代码文本对应的原始抽象语法树。
S3,对原始抽象语法树进行精简。
具体地,可结合原始抽象语法树节点类型对原始抽象语法树的冗余信息进行删除,仅保留原始抽象语法树中所有节点的类型信息,以及各节点之间的树形连接关系。其中,精简后的原始抽象语法树可包括原始抽象语法树的树形结构和节点类型。
S4,对精简后的原始抽象语法树进行遍历编码,以得到源代码文本的编码序列表示。
具体地,如图3所示,对精简后的原始抽象语法树进行遍历编码,以得到源代码文本的编码序列表示包括步骤:
S401,对精简后的原始抽象语法树的所有节点类型进行顺序编码,以得到所有节点类型的类型编码。
具体地,可通过三个字符长度,以及自然数序列构成节点类型的类型编码,例如,第一种节点类型的类型编码可为001,第二种节点类型的类型编码可为002,以此类推。
S402,对精简后的原始抽象语法树的所有节点从根节点开始进行前序遍历,以得到所有节点的遍历顺序。
进一步地,在得到所有节点的遍历顺序时,可同时标记各个节点的层级,例如,可将根节点所在层级标记为0,可将根节点的所有子节点所在层级标记为1,可将所有层级为1的节点的所有子节点所在层级标记为2,以此类推。
S403,根据遍历顺序对精简后的原始抽象语法树的所有节点结构进行编码,以得到所有节点结构的结构编码。
具体地,可通过四个字符长度,以及当前节点所在层级与前一节点所在层级的差值构成当前节点的结构编码,例如,根节点的结构编码可为+000,在遍历顺序中下一节点若为层级标记为1的节点,则结构编码可为+001;若遍历顺序中前一节点层级标记为1,当前节点层级标记为2,则当前节点结构编码可为+001;若遍历顺序中前一节点层级标记为5,当前节点层级标记为2,则当前节点结构编码可为-003,以此类推。
S404,对精简后的原始抽象语法树进行全文编码,并根据类型编码和结构编码对前序遍历的节点进行编码,以得到源代码文本的编码序列表示。
具体地,可通过类型编码和结构编码组合的形式对前序遍历的节点进行编码,例如,若根节点为第一种节点类型,则可编码为+000001,若后序节点为层级标记为1且第二种节点类型,则可编码为+001002,以此类推,最终得到该源代码文本的全文编码序列表示。
在本发明的一个实施例中,编码序列可同时包括类型编码和结构编码。通过同时包括类型编码和结构编码的编码序列表示源代码文本,能够同时表示出源代码文本对应的原始抽象语法树的结构类型和树形结构信息,从而能够表示出源代码文本转换为原始抽象语法树之后保留的文本特征,并能够表示出源代码文本中的控制结构信息。
在本发明的一个具体实施例中,源代码文本可为C语言文本。
下面将采用C语言文本作为源代码文本,具体阐述本发明的基于静态程序分析的源代码编码序列表示方法的流程。
首先,可通过源代码分析工具解析并导出C语言文本对应的原始抽象语法树文件,例如图4所示的C语言文本对应的原始抽象语法树文件。
进一步地,删除C语言文本对应的原始抽象语法树文件中冗余信息,例如删除图4文件中关于抽象语法树节点类型字段之后的信息,从而得到图5所示的C语言文本对应的精简抽象语法树文件。
进一步地,如图6所示,对于抽象语法树可采用节点标识A、B、C等表示节点类型,同时采用L0表示根节点所在层级、L1表示层级为L0的根节点的所有子节点所在层级、L2表示所有层级为L1的节点的所有子节点所在层级。
进一步地,如图7所示,可采用“节点层级+节点类型”的形式表示通过前序遍历的抽象语法树的所有节点,例如,层级为L0且节点类型为A的根节点可表示为L0A,层级为L1且节点类型为B的节点可表示为L1B,以此类推,可得到抽象语法树文件的序列化表示。
进一步地,如图8所示,可通过每个节点类型前的三个数字标识替换序列化表示中的类型字段,例如,替换图7中的类型字段A、B、C等。同时,可通过节点层级差替换序列化表示中的层级字段,例如,替换图7中的层级字段L0、L1和L2。具体地,可先将根节点的层级字段编码为+000,然后后续节点的层级字段编码通过使用当前节点层级减去前一节点层级,并通过“+”或“-”表示层级差的正负值,同时通过三位数字编码表示层级差的绝对值,以此可替换序列化的抽象语法树文件中的层级字段。
基于上述方法,可得到完整的C语言文本序列编码抽象语法树,从而实现C语言文本的编码序列表示,例如,图9所示的编码序列表示。
根据本发明实施例提出的基于静态程序分析的源代码编码序列表示方法,通过获取源代码文本,然后对源代码文本进行转换,以得到源代码文本对应的原始抽象语法树,并对原始抽象语法树进行精简,最后对精简后的原始抽象语法树进行遍历编码,以得到源代码文本的编码序列表示,由此,能够简化源代码文本对应的原始抽象语法树的树形结构,并能够较好的将原始抽象语法树的树形结构转换为编码序列,同时能够保证编码序列具有较好检索性能和匹配性能。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。
Claims (3)
1.一种基于静态程序分析的源代码编码序列表示方法,其特征在于,包括:
获取源代码文本;
对所述源代码文本进行转换,以得到所述源代码文本对应的原始抽象语法树;
对所述原始抽象语法树进行精简;
对精简后的原始抽象语法树进行遍历编码,以得到所述源代码文本的编码序列表示,
在所述源代码文本包含头文件申明行时,对所述源代码文本进行转换,以得到所述源代码文本对应的原始抽象语法树包括:对所述源代码文本进行预处理以删除所述源代码文本的所述头文件申明行;采用源代码分析工具解析并导出所述源代码文本对应的原始抽象语法树,
在所述源代码文本不包含头文件申明行时,对所述源代码文本进行转换,以得到所述源代码文本对应的原始抽象语法树包括:对所述源代码文本采用源代码分析工具解析并导出所述源代码文本对应的原始抽象语法树,
对所述原始抽象语法树进行精简包括:结合所述原始抽象语法树节点类型对所述原始抽象语法树的冗余信息进行删除,
所述精简后的原始抽象语法树包括所述原始抽象语法树的树形结构和节点类型,对精简后的原始抽象语法树进行遍历编码,以得到所述源代码文本的编码序列表示包括:对所述精简后的原始抽象语法树的所有节点类型进行顺序编码,以得到所述所有节点类型的类型编码,该类型编码通过每个节点类型前的三个数字标识替换序列化表示中的类型字段;对所述精简后的原始抽象语法树的所有节点从根节点开始进行前序遍历,以得到所述所有节点的遍历顺序;根据所述遍历顺序对所述精简后的原始抽象语法树的所有节点结构进行编码,以得到所述所有节点结构的结构编码,其中,前节点所在层级与前一节点所在层级的差值构成当前节点的结构编码,其中,通过节点层级差替换序列化表示中的层级字段,通过“+”或“-”表示层级差的正负值,通过三位数字编码表示层级差的绝对值;对所述精简后的原始抽象语法树进行全文编码,并根据所述类型编码和所述结构编码对所述前序遍历的节点进行编码,以得到所述源代码文本的编码序列表示,所述编码序列同时包括所述类型编码和所述结构编码。
2.根据权利要求1所述的基于静态程序分析的源代码编码序列表示方法,其特征在于,所述头文件申明行包括“#include”字符串。
3.根据权利要求2所述的基于静态程序分析的源代码编码序列表示方法,其特征在于,所述源代码文本为C语言文本。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910981926.6A CN110737466B (zh) | 2019-10-16 | 2019-10-16 | 基于静态程序分析的源代码编码序列表示方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910981926.6A CN110737466B (zh) | 2019-10-16 | 2019-10-16 | 基于静态程序分析的源代码编码序列表示方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110737466A CN110737466A (zh) | 2020-01-31 |
CN110737466B true CN110737466B (zh) | 2021-04-02 |
Family
ID=69269082
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910981926.6A Active CN110737466B (zh) | 2019-10-16 | 2019-10-16 | 基于静态程序分析的源代码编码序列表示方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110737466B (zh) |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111314388B (zh) * | 2020-03-26 | 2022-07-15 | 北京百度网讯科技有限公司 | 用于检测sql注入的方法和装置 |
CN113535228B (zh) * | 2020-04-14 | 2024-04-09 | 深圳富桂精密工业有限公司 | 监控数据链路的方法、装置及计算机可读存储介质 |
CN111880777A (zh) * | 2020-06-23 | 2020-11-03 | 北京三快在线科技有限公司 | 程序信息下发方法、装置、电子设备 |
CN112416431B (zh) * | 2020-11-23 | 2023-02-14 | 南京航空航天大学 | 一种基于编码序列表示的源代码片段成对比较方法 |
CN112328257A (zh) * | 2020-11-24 | 2021-02-05 | 中国工商银行股份有限公司 | 代码转换方法及装置 |
CN113094026B (zh) * | 2021-04-09 | 2024-02-06 | 中国工商银行股份有限公司 | 代码处理方法和装置 |
CN113391817B (zh) * | 2021-06-16 | 2022-08-26 | 中国海洋大学 | 基于antlr4的头文件替换方法及装置 |
CN114860241B (zh) * | 2022-07-07 | 2022-09-23 | 中国海洋大学 | 一种基于生成对抗网络的代码抽象语法树生成方法 |
CN117112730B (zh) * | 2023-08-23 | 2024-03-22 | 北京云枢创新软件技术有限公司 | 基于宏展开文本的目标文本搜索方法、电子设备和介质 |
CN116954622B (zh) * | 2023-09-18 | 2023-12-15 | 北京云枢创新软件技术有限公司 | 抽象语法树和源代码坐标的关联方法、电子设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN109101235A (zh) * | 2018-06-05 | 2018-12-28 | 北京航空航天大学 | 一种软件程序的智能解析方法 |
CN110018820A (zh) * | 2019-04-08 | 2019-07-16 | 浙江大学滨海产业技术研究院 | 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20110302563A1 (en) * | 2010-06-08 | 2011-12-08 | Avaya Inc. | Program structure recovery using multiple languages |
CN101894236B (zh) * | 2010-07-28 | 2012-01-11 | 北京华夏信安科技有限公司 | 基于摘要语法树和语义匹配的软件同源性检测方法及装置 |
CN103645986B (zh) * | 2013-11-29 | 2016-08-17 | 北京广利核系统工程有限公司 | 一种编译器的可视化语法树的生成方法和重构方法 |
CN103729580A (zh) * | 2014-01-27 | 2014-04-16 | 国家电网公司 | 一种检测软件抄袭的方法和装置 |
US10360004B2 (en) * | 2017-02-27 | 2019-07-23 | International Business Machines Corporation | Using dynamic information to refine control flow graphs |
-
2019
- 2019-10-16 CN CN201910981926.6A patent/CN110737466B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105159715A (zh) * | 2015-09-01 | 2015-12-16 | 南京大学 | 一种基于抽象语法树节点变更抽取的Python代码变更提示方法 |
CN109101235A (zh) * | 2018-06-05 | 2018-12-28 | 北京航空航天大学 | 一种软件程序的智能解析方法 |
CN110018820A (zh) * | 2019-04-08 | 2019-07-16 | 浙江大学滨海产业技术研究院 | 一种基于深度强化学习的Graph2Seq自动生成Java代码注释的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110737466A (zh) | 2020-01-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110737466B (zh) | 基于静态程序分析的源代码编码序列表示方法 | |
CN109445834B (zh) | 基于抽象语法树的程序代码相似性快速比较方法 | |
CN110018829B (zh) | 提高pl/sql语言解释器执行效率的方法及装置 | |
CN107203468B (zh) | 一种基于ast的软件版本演化对比分析方法 | |
CN106709356A (zh) | 基于静态污点分析和符号执行的安卓应用漏洞挖掘方法 | |
CN113722218B (zh) | 一种基于编译器中间表示的软件缺陷预测模型构建方法 | |
CN109684838B (zh) | 一种针对以太坊智能合约的静态代码审计系统及方法 | |
CN112149399A (zh) | 基于rpa及ai的表格信息抽取方法、装置、设备及介质 | |
CN108549535B (zh) | 一种基于文件依赖关系的高效程序解析方法和系统 | |
US20210365258A1 (en) | Method and system for updating legacy software | |
CN109816038B (zh) | 一种物联网固件程序分类方法及其装置 | |
CN114816517A (zh) | 一种层次语义感知的代码表示学习方法 | |
CN110427179B (zh) | 面向智能合约语言的msvl程序自动生成方法及系统 | |
CN110806973A (zh) | 一种接口报文的自动生成方法及装置 | |
CN115016782A (zh) | vue组件生成方法及装置 | |
CN115203494A (zh) | 一种面向文本的时间信息抽取方法及装置 | |
CN114706558A (zh) | 基于K-Truss的复杂软件关键模块识别方法 | |
CN110554860B (zh) | 一种软件项目自然语言编程接口nli的构造方法及代码生成方法 | |
CN113050948A (zh) | 动态库优化方法、装置、设备及存储介质 | |
CN115879868B (zh) | 一种专家系统与深度学习相融合的智能合约安全审计方法 | |
CN111930705B (zh) | 二进制消息协议数据处理方法及装置 | |
US20230266948A1 (en) | Method for extracting the structure of an input for a binary program | |
CN113296786B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
Henzinger | Fully dynamic cycle-equivalence in graphs | |
CN117252160A (zh) | 一种文档编辑方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |