CN103677952A - 编解码器生成装置及方法 - Google Patents
编解码器生成装置及方法 Download PDFInfo
- Publication number
- CN103677952A CN103677952A CN201310698083.1A CN201310698083A CN103677952A CN 103677952 A CN103677952 A CN 103677952A CN 201310698083 A CN201310698083 A CN 201310698083A CN 103677952 A CN103677952 A CN 103677952A
- Authority
- CN
- China
- Prior art keywords
- codec
- tree
- syntax
- node
- object tree
- 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
Links
Images
Landscapes
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例提供一种编解码器生成装置及方法。该方法包括:将数据格式类描述文件的字符序列解析为多个单词符号;根据语法规则对所述多个单词符号进行语法分析,生成语法树;遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树;其中,各所述子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,所述组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口。
Description
技术领域
本发明实施例涉及通信技术,尤其涉及一种编解码器生成装置及方法。
背景技术
抽象语法标记(Abstract Syntax Notation One,简称ASN.1)是一种国际标准,描述了一种对数据进行表示、编码、传输和解码的数据格式。在任何需要以数字方式发送信息的地方,都可以基于ASN.1发送各种形式的信息(声频、视频、数据等等)。
现有技术中,ASN.1编解码器主要以插件的形式实现。具体地,先编写ASN.1文件,再用对应的代码自动生成工具将该ASN.1文件转化为C或C++或java源文件,最后将源文件编译成动态链接库或jar包,该动态链接库或jar包以插件的形式存在,并供应用程序调用。
然而,在制作插件的过程中,需要将ASN.1文件转化为C或C++或java源文件,再进行编译,这种以插件形式存在的编解码器的制作过程比较复杂和繁琐。
发明内容
本发明实施例提供一种编解码器生成装置及方法,以简化编解码器的制作过程。
第一方面,本发明实施例提供一种编解码器生成装置,包括:
词法分析模块,用于将数据格式类描述文件的字符序列解析为多个单词符号;
语法分析模块,用于根据语法规则对所述多个单词符号进行语法分析,生成语法树;
语法树遍历模块,用于遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树;
其中,各所述子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,所述组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口。
结合第一方面,在第一方面的第一种可能的实现方式中,所述语法分析模块具体用于:
根据语法规则对所述多个单词符号进行语法分析,生成语法树,并确定所述语法树各节点的属性信息以及所述语法树的嵌套结构;
所述语法树遍历模块具体用于:
遍历所述语法树的各节点,根据各节点的属性信息,创建与所述各节点对应的子编解码器,并根据所述语法树的嵌套结构,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树,并将所述编解码器对象树存储在内存中。
结合第一方面或第一方面的第一种可能的实现方式,在第一方面的第二种可能的实现方式中,所述装置还包括:
编解码库,用于向各所述子编解码器单元提供无状态编解码工具函数,以使各所述子编解码器单元对所述无状态编解码工具函数进行调用。
结合第一方面的第二种可能的实现方式,在第一方面的第三种可能的实现方式中,所述装置还包括:
保存模块,用于在语法树遍历模块将各所述子编解码器单元串成与所述语法树对应的编解码器对象树之后,将所述编解码器对象树存储在内存中,并建立所述编解码器对象树的根节点的内存地址与所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中,以使应用程序根据所述数据格式类描述文件的标识确定所述编解码器对象树的根节点的内存地址。
结合第一方面的第三种可能的实现方式,在第一方面的第四种可能的实现方式中,所述装置还包括:
文件遍历模块,用于在所述数据格式类描述文件为多个时,遍历各所述数据格式类描述文件,生成与所述数据格式类描述文件对应的编解码器对象树,并将各所述编解码器对象树保存在内存中,建立各所述编解码器对象树的根节点的内存地址与各所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中。
结合第一方面的第四种可能的实现方式,在第一方面的第五种可能的实现方式中,所述数据格式类描述文件为抽象语法标记描述文件。
第二方面,本发明实施例提供一种编解码器生成方法,包括:
将数据格式类描述文件的字符序列解析为多个单词符号;
根据语法规则对所述多个单词符号进行语法分析,生成语法树;
遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树;
其中,各所述子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,所述组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口。
结合第二方面,在第二方面的第一种可能的实现方式中,所述根据语法规则对所述多个单词符号进行语法分析,生成语法树,包括:
根据语法规则对所述多个单词符号进行语法分析,生成语法树,并确定所述语法树各节点的属性信息以及所述语法树的嵌套结构;
所述遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树包括:
遍历所述语法树的各节点,根据各节点的属性信息,创建与所述各节点对应的子编解码器,并根据所述语法树的嵌套结构,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树,并将所述编解码器对象树存储在内存中。
结合第二方面或第二方面的第一种可能的实现方式,在第二方面的第二种可能的实现方式中,所述在语法树遍历模块将各所述子编解码器单元串成与所述语法树对应的编解码器对象树之后,还包括:
将所述编解码器对象树存储在内存中,并建立所述编解码器对象树的根节点的内存地址与所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中,以使应用程序根据所述数据格式类描述文件的标识确定所述编解码器对象树的根节点的内存地址。
结合第二方面的第二种可能的实现方式,在第二方面的第三种可能的实现方式中,在所述数据格式类描述文件为多个时,所述方法还包括:
遍历各所述数据格式类描述文件,生成与所述数据格式类描述文件对应的编解码器对象树,并将各所述编解码器对象树保存在内存中,建立各所述编解码器对象树的根节点的内存地址与各所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中。
结合第二方面的第三种可能的实现方式,在第二方面的第四种可能的实现方式中,所述数据格式类描述文件为抽象语法标记描述文件。
本发明实施例提供的编解码器生成装置及方法,该装置包括词法分析模块,用于将数据格式类描述文件的字符序列解析为多个单词符号;语法分析模块,用于根据语法规则,将所述多个单词符号串成语法树;语法树遍历模块,用于遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树;其中,各所述子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,所述组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口,不需要将数据格式类描述文件转化为C或C++或java源文件,然后编译生成插件,本实施例直接根据语法树获取编解码器,简化了编解码器的生成过程,并且使得应用程序在启动的初始化阶段可以调用编解码器对象树。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明编解码器生成装置实施例一的结构示意图;
图2为本发明编解码器生成方法实施例一的流程示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明编解码器生成装置实施例一的结构示意图。本发明提供的编解码器生成装置可以由任意的软件和/或硬件实现。如图1所示,本发明提供的编解码器生成装置10包括词法分析模块101、语法分析模块102和语法树遍历模块103。
词法分析模块101,用于将数据格式类描述文件的字符序列解析为多个单词符号;
语法分析模块102,用于根据语法规则对所述多个单词符号进行语法分析,生成语法树;
语法树遍历模块103,用于遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树;
其中,各所述子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,所述组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口。
在具体实现过程中,数据格式类描述文件具体可以为描述数据格式以及数据格式相关内容的描述文件。例如“ASN.1”描述文件,描述了一种对数据进行表示、编码、传输和解码的数据格式,JSON(JavaScript Object Notation)描述文件描述了一种数据交换格式。本实施例中的数据格式类描述文件还可以为ASN.1的各种自定义的扩展,或者JSON的各种自定义的扩展,或者其它类似ASN.1或JSON的数据格式类描述文件,并且具有和ASN.1的编码规则类似的编解码规则。
在具体实现过程中,在应用程序的初始化阶段,根据数据格式类描述文件,在内存中创建与该数据格式类描述文件对应的编解码器,然后进行编解码过程。
下面采用具体的实施例,对如何创建编解码器进行详细说明。
首先,词法分析模块101将数据格式类描述文件的字符序列解析为多个单词符号,在具体实现过程中,词法分析模块101可以从左至右逐个字符地对数据格式类描述文件的字符序列进行扫描,产生一个个的单词符号,其中,单词符号是一个程序语言的基本,包括关键字、标识符、常数运算符号、界符等。
进一步地,可通过如下方式获取词法分析模块:编写与抽象语法标记的语法特征对应的词法规则文件(.l后缀文件),将所述词法规则文件作为Flex工具的输入,Flex工具生成词法分析模块的C++或java代码。对于如何获取词法分析模块,本实施例此处不做特别限制。
接着,语法分析模块102根据语法规则对所述多个单词符号进行语法分析,生成语法树。具体地,语法规则规定了如何从单词符号形成更大的结构。语法分析模块102可以根据语法规则,通过自顶向下分析法或自顶向上分析法生成语法树,本领域技术人员可以理解,该语法树存储在内存中,语法树的各个节点存储各种属性信息,语法树能够描述复杂数据结构各个成员之间的相互关系。进一步地,语法分析模块102在对多个单词符号进行语法分析,生成语法树的同时,还确定语法树各节点的属性信息,根据各节点的属性信息确定语法树的嵌套结构。
进一步地,可通过如下方式获取语法分析模块:编写与抽象语法标记的语法特征对应的上下文无关文法描述文件(.y后缀文件),将所述上下文无关文法描述文件作为Bison软件的输入,Bison软件生成语法分析模块的C++或java代码。对于如何获取语法分析模块,本实施例此处不做特别限制。
由上可知,词法分析模块和语法分析模块是由第三方工具生成。当抽象语法标记的语法扩充或者变时,才需要修改.l和.y文件,然后再用上面的两个工具生成词法分析模块和语法分析模块的源代码。
然后,语法树遍历模块103遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树。
具体地,语法树遍历模块103可以通过深度优先的先序遍历算法来遍历语法树的各节点,根据各节点的属性信息,创建与所述各节点对应的子编解码器。得到多个子编解码器之后,根据语法树的嵌套结构,将各子编解码器单元串成与语法树对应的编解码器对象树,其中,编解码器对象树中各子编解码器的嵌套结构与语法树中各节点的嵌套结构具有对应关系。
当数据格式类描述文件为“ASN.1”描述文件时,ASN.1规范规定了变量名命名规则、基本数据类型、基本构造类型。特别地,基于“ASN.1”的描述文件可以有许多编解码规则,如基本编码规则(Basic Encoding Rules,简称BER),压缩编码规则(packed Encoding Rules,简称PER)等,该些编解码规则可应用于各类通信接口。
其中,基本数据类型包括:BOOLEAN,INTEGER,BITSTRING,OCTETSTRING,REAL,ENUMERATED,ANY,OBJECT IDENTIFIER等。其中,字符串类型,都是OCTETSTRING的子类型包括:NumericString,PrintableString,TeletexString,VideotexString,,IA5String,GraphicString,VisibleString,GeneralString。
基本构造类型:SEQUENCE指一个或多个组成元素的有序列表,其元素可以是各种类型,也可以是SEQUENCE;SEQUENCE OF则是SEQUENCE的特例,它的组成元素必须是同一个ASN.1类型,类似数组;
SET类似于SEQUENCE,区别在于它的组成元素是无序排列的;SET OF和SET的区别类似于SEQUENCE和SEQUENCE OF的区别;
CHOICE包含一个可供选择类型的列表。
由此,根据ASN.1描述文件创建的语法树,以及根据该语法树创建的与该语法树对应的编解码器对象树,在编解码器对象树,各子编解码器单元将与ASN.1描述文件的基本数据类型和基本构造类型对应。其中,与基本数据类型对应的子编解码器单元为简单类型的编解码器单元,与基本构造类型对应的子编解码器单元为组合类型的编解码器单元。特别地,组合类型的编解码器单元里存放着简单类型编解码器器单元或者其它组合类型编解码器单元的指针以及相关的控制信息(例如:CHOICE的选择信息,ARRAY的长度等)。
当数据格式类描述文件为JSON描述文件时,JSON建构有两种结构,包括对象和数组,通过这两种结构可以表示各种复杂的结构。
其中,对象:对象的数据结构为{key:value,key:value,...}的键值对的结构,在面向对象的语言中,key为对象的属性,value为对应的属性值,属性值的类型可以是数字、字符串、数组、对象几种。数组的数据结构为[″java″,″javascript″,″vb″,...],取值方式和所有语言中一样,使用索引获取,字段值的类型可以是数字、字符串、数组、对象几种。经过对象、数组2种结构就可以组合成复杂的数据结构了。
由此,根据JSON描述文件创建的语法树,以及根据该语法树创建的与该语法树对应的编解码器对象树,在编解码器对象树中,各子编解码器单元将与JSON描述文件的对象和数组对应。其中,与对象对应的子编解码器单元为简单类型的编解码器单元,与数组对应的子编解码器单元为组合类型的编解码器单元。
对于基于其它数据格式类描述文件构建语法树,创建编解码器的过程,本实施例此处不再赘述。
由上可知,各子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口。
在编解码器创建结束后,在具体的编解码过程中,编解码器对象树的根节点的编解码接口为数据流或编码流的入口,在数据流或编码流进入根节点的编解码接口之后,按照深度优先的先序遍历方式,遍历编解码器对象树,从而对数据流进行编码,对编码流进行解码。
上述实施例中,对构建编解码器对象树进行了详细说明。在具体实现过程中,编码器对象树或解码器对象树的构建过程,与构建编解码器对象树的过程类似,所不同的是子编解码器单元的内部实现不同,对于编码器对象树或解码器对象树的构建过程,本实施例此处不再赘述。
本发明实施例提供的编解码器生成装置,包括词法分析模块,用于将数据格式类描述文件的字符序列解析为多个单词符号;语法分析模块,用于根据语法规则,将所述多个单词符号串成语法树;语法树遍历模块,用于遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树;其中,各所述子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,所述组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口,不需要将“数据格式类”描述文件转化为C或C++或java源文件,然后编译生成插件,本实施例直接根据语法树获取编解码器,简化了编解码器的生成过程,并且使得应用程序在启动的初始化阶段可以调用编解码器对象树。
可选地,该编解码器生成装置还包括编解码库,用于向各所述子编解码器单元提供无状态编解码工具函数,以使各所述子编解码器单元对所述无状态编解码工具函数进行调用。
在具体实现过程中,子编解码器在进行编解码的过程中,可以调用编解码库中的无状态编解码工具函数,实现编解码过程。
可选地,该编解码器生成装置还包括保存模块,用于在语法树遍历模块将各所述子编解码器单元串成与所述语法树对应的编解码器对象树之后,将所述编解码器对象树存储在内存中,并建立所述编解码器对象树的根节点的内存地址与所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中,以使应用程序根据所述数据格式类描述文件的标识确定所述编解码器对象树的根节点的内存地址。
以“ASN.1”描述文件为例,在具体实现过程中,当编解码器对象树建立后,将编解码器对象树保存在内存中,使得应用程序在使用编解码器对象树时,可以直接从内存中调用编解码器对象树。具体地,为了使应用程序能够快速的调用编解码器对象树,保存模块还建立编解码器对象树的根节点的内存地址与“ASN.1”描述文件的标识的关联关系。
其中,“ASN.1”描述文件的标识具体可以为“ASN.1”描述文件的版本名或类型名等,对于“ASN.1”描述文件的标识的具体实现方式,本实施例此处不再赘述。
由于编解码器对象树的编解码接口位于编解码器对象树的根节点,因此,建立编解码器对象树的根节点的内存地址与“ASN.1”描述文件的标识的关联关系,使得应用程序可以根据关联关系,查找到“ASN.1”描述文件的标识对应的编解码器对象树的根节点。
进一步地,关联关系的建立可以通过以下可能的实现方式实现。一种可能的实现方式为:对编解码器对象树根节点的内存地址进行引用,生成编解码器对象树指针,建立编解码器对象树指针与“ASN.1”描述文件的标识的对应关系,并以名值对的形式保存在编解码器池中。另一种可能的实现方式,建立编解码器对象树的根节点的内存地址与“ASN.1”描述文件的标识的映射关系。又一种可能的实现方式,可以通过表格的形式建立编解码器对象树的根节点的内存地址与“ASN.1”描述文件的标识的对应关系。对于关联关系的建立的具体实现过程,本实施例不做特别限制。
可选地,本实施例提供的装置还包括文件遍历模块,用于在所述数据格式类描述文件为多个时,遍历各所述数据格式类描述文件,生成与所述数据格式类描述文件对应的编解码器对象树,并将各所述编解码器对象树保存在内存中,建立各所述编解码器对象树的根节点的内存地址与各所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中。
在上述的实施例中,介绍了针对一个数据格式类描述文件生成编解码器对象树的过程,下面说明当有多个数据格式类描述文件时,如果生成编解码器。具体地,以“ASN.1”描述文件为例,当有多个“ASN.1”描述文件时,遍历各“ASN.1”描述文件,对多个“ASN.1”描述文件进行循环编译时,获取针对每一个ASN文件生成的编解码器对象树,并将各所述编解码器对象树保存在内存中,建立各所述编解码器对象树的根节点的内存地址与各所述“ASN.1”描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中。其中,针对每一个“ASN.1”描述文件生成编解码器对象树的过程都与上述过程类似。本实施例此处不再赘述。
在具体应用过程中,应用程序直接根据“ASN.1”描述文件的版本名或类型名获取对应的编解码器对象树的根节点的内存地址,从而实现了跨版本跨类型的自适应编解码,使得数据结构发生变化,实现编解码的代码不用修改重编解也能正常工作。
由于编解码器池的存在,弥补了插件式编解码的不足,现有技术中,当ASN.1文件发生变更时,需要重新将该ASN.1文件转化为C或C++或java源文件,编译出新的插件,导致整个过程花费时间多,使得对插件的维护需要耗费大量精力。而本实施例中,ASN描述文件发生变更,代码不用变更,直接从编解码器池中选取相应的ASN描述文件即可。由于ASN.1是国际标准的语法,能够描述任意复杂的数据结构,因此使用此方案的编解码器自然就能够处理任意复杂的数据结构,通用性强,同时还能减少在编解码方面的重复投入,节约成本。
进一步地,本实施例中的编解码器对象树不是独立于目标程序的,不是与目标程序分开的,其被执行调用可以发生在目标程序的启动初始化阶段,每次启动都根据ASN描述文件编译生成编解码器对象树,该解码器对象树在整个程序运行期间一直有效。可以在启动初始化阶段将所有需要的多个版本或者多个类型的ASN描述文件一次循环编译,实现跨版本,跨类型的自适应编码,解码,或编解码,以及不同版本或类型之间的快速切换。
编解码器的实现只跟ASN语法相关,与具体的ASN描述的数据结构无关,因此,针对相同的ASN描述文件,本实施例实现的编码器输出的码流能被其它方案实现的解码器解码,同样,用其它方案实现的编码器生成的码流,也是能够被本实施例实现的解码器解码。
图2为本发明编解码器生成方法实施例一的流程示意图。如图2所示,本实施例提供的编解码器生成方法包括:
步骤201、将数据格式类描述文件的字符序列解析为多个单词符号;
步骤202、根据语法规则对所述多个单词符号进行语法分析,生成语法树;
步骤203、遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树;
其中,各所述子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,所述组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口。
本实施例的编解码器生成方法,可由图1实施例提供的编解码器生成装置执行,其实现原理和技术效果与图1实施例的编解码器生成装置类似,本实施例此处不再赘述。
可选地,所述根据语法规则对所述多个单词符号进行语法分析,生成语法树,包括:
根据语法规则对所述多个单词符号进行语法分析,生成语法树,并确定所述语法树各节点的属性信息以及所述语法树的嵌套结构;
可选地,所述遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树包括:
遍历所述语法树的各节点,根据各节点的属性信息,创建与所述各节点对应的子编解码器,并根据所述语法树的嵌套结构,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树,并将所述编解码器对象树存储在内存中。
可选地,所述在语法树遍历模块将各所述子编解码器单元串成与所述语法树对应的编解码器对象树之后,还包括:
将所述编解码器对象树存储在内存中,并建立所述编解码器对象树的根节点的内存地址与所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中,以使应用程序根据所述数据格式类描述文件的标识确定所述编解码器对象树的根节点的内存地址。
可选地,在所述数据格式类描述文件为多个时,所述方法还包括:
遍历各所述数据格式类描述文件,生成与所述数据格式类描述文件对应的编解码器对象树,并将各所述编解码器对象树保存在内存中,建立各所述编解码器对象树的根节点的内存地址与各所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中。
可选地,所述数据格式类描述文件为抽象语法标记描述文件。
本实施例的编解码器生成方法,可由上述实施例提供的编解码器生成装置执行,其实现原理和技术效果与上述实施例的编解码器生成装置类似,本实施例此处不再赘述。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
Claims (11)
1.一种编解码器生成装置,其特征在于,包括:
词法分析模块,用于将数据格式类描述文件的字符序列解析为多个单词符号;
语法分析模块,用于根据语法规则对所述多个单词符号进行语法分析,生成语法树;
语法树遍历模块,用于遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树;
其中,各所述子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,所述组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口。
2.根据权利要求1所述的装置,其特征在于,所述语法分析模块具体用于:
根据语法规则对所述多个单词符号进行语法分析,生成语法树,并确定所述语法树各节点的属性信息以及所述语法树的嵌套结构;
所述语法树遍历模块具体用于:
遍历所述语法树的各节点,根据各节点的属性信息,创建与所述各节点对应的子编解码器,并根据所述语法树的嵌套结构,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树,并将所述编解码器对象树存储在内存中。
3.根据权利要求1或2所述的装置,其特征在于,还包括:
编解码库,用于向各所述子编解码器单元提供无状态编解码工具函数,以使各所述子编解码器单元对所述无状态编解码工具函数进行调用。
4.根据权利要求3所述的装置,其特征在于,还包括:
保存模块,用于在语法树遍历模块将各所述子编解码器单元串成与所述语法树对应的编解码器对象树之后,将所述编解码器对象树存储在内存中,并建立所述编解码器对象树的根节点的内存地址与所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中,以使应用程序根据所述数据格式类描述文件的标识确定所述编解码器对象树的根节点的内存地址。
5.根据权利要求4所述的装置,其特征在于,还包括:
文件遍历模块,用于在所述数据格式类描述文件为多个时,遍历各所述数据格式类描述文件,生成与所述数据格式类描述文件对应的编解码器对象树,并将各所述编解码器对象树保存在内存中,建立各所述编解码器对象树的根节点的内存地址与各所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中。
6.根据权利要求5所述的装置,其特征在于,所述数据格式类描述文件为抽象语法标记描述文件。
7.一种编解码器生成方法,其特征在于,包括:
将数据格式类描述文件的字符序列解析为多个单词符号;
根据语法规则对所述多个单词符号进行语法分析,生成语法树;
遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树;
其中,各所述子编解码器单元包括组合类型的编解码器单元或简单类型的编解码器单元,所述组合类型的编解码器单元位于所述编解码器对象树的分支节点或根节点,所述简单类型的编解码器单元位于所述编解码器对象树的叶子节点,所述编解码器对象树的根节点的编解码接口为所述编解码器的编解码入口。
8.根据权利要求7所述的方法,其特征在于,所述根据语法规则对所述多个单词符号进行语法分析,生成语法树,包括:
根据语法规则对所述多个单词符号进行语法分析,生成语法树,并确定所述语法树各节点的属性信息以及所述语法树的嵌套结构;
所述遍历所述语法树的各节点,创建与所述各节点对应的子编解码器单元,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树包括:
遍历所述语法树的各节点,根据各节点的属性信息,创建与所述各节点对应的子编解码器,并根据所述语法树的嵌套结构,将各所述子编解码器单元串成与所述语法树对应的编解码器对象树,并将所述编解码器对象树存储在内存中。
9.根据权利要求7或8所述的方法,其特征在于,还包括:所述在语法树遍历模块将各所述子编解码器单元串成与所述语法树对应的编解码器对象树之后,还包括:
将所述编解码器对象树存储在内存中,并建立所述编解码器对象树的根节点的内存地址与所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中,以使应用程序根据所述数据格式类描述文件的标识确定所述编解码器对象树的根节点的内存地址。
10.根据权利要求9所述的方法,其特征在于,在所述数据格式类描述文件为多个时,所述方法还包括:
遍历各所述数据格式类描述文件,生成与所述数据格式类描述文件对应的编解码器对象树,并将各所述编解码器对象树保存在内存中,建立各所述编解码器对象树的根节点的内存地址与各所述数据格式类描述文件的标识的关联关系,并将所述关联关系保存在编解码器池中。
11.根据权利要求10所述的方法,其特征在于,所述数据格式类描述文件为抽象语法标记描述文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310698083.1A CN103677952B (zh) | 2013-12-18 | 2013-12-18 | 编解码器生成装置及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310698083.1A CN103677952B (zh) | 2013-12-18 | 2013-12-18 | 编解码器生成装置及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103677952A true CN103677952A (zh) | 2014-03-26 |
CN103677952B CN103677952B (zh) | 2018-05-11 |
Family
ID=50315609
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310698083.1A Active CN103677952B (zh) | 2013-12-18 | 2013-12-18 | 编解码器生成装置及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103677952B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104331315A (zh) * | 2014-10-31 | 2015-02-04 | 北京思特奇信息技术股份有限公司 | 一种任意层次json对象的解析与生成方法及*** |
CN107251537A (zh) * | 2015-02-10 | 2017-10-13 | 瑞典爱立信有限公司 | 用于数据中介的方法和装置 |
CN109255209A (zh) * | 2017-07-13 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、设备和存储介质 |
CN109656567A (zh) * | 2018-12-20 | 2019-04-19 | 北京树根互联科技有限公司 | 异质化业务数据处理逻辑的动态方法和*** |
CN109683873A (zh) * | 2018-11-16 | 2019-04-26 | 中国西安卫星测控中心 | 利用asn1规则的航天信息接口编码方法及***架构 |
CN109933327A (zh) * | 2019-02-02 | 2019-06-25 | 中国科学院计算技术研究所 | 基于代码融合编译框架的OpenCL编译器设计方法和*** |
CN111090417A (zh) * | 2019-11-14 | 2020-05-01 | 杭州中恒电气股份有限公司 | 二进制文件解析方法、装置、设备及介质 |
CN112600562A (zh) * | 2020-12-01 | 2021-04-02 | 四川虹美智能科技有限公司 | 编解码方法、装置及计算机可读介质以及物联网设备 |
CN113742294A (zh) * | 2021-08-23 | 2021-12-03 | 宜通世纪科技股份有限公司 | 一种asn.1-per信令消息解码方法、***、装置及介质 |
CN113947071A (zh) * | 2021-10-21 | 2022-01-18 | 北京四方继保工程技术有限公司 | 一种变电站五防文件的解析执行***及方法 |
CN114489682A (zh) * | 2022-04-14 | 2022-05-13 | 北京宝兰德软件股份有限公司 | nginx配置文件的操作方法、装置和设备 |
CN117278053A (zh) * | 2023-11-17 | 2023-12-22 | 南京智盟电力有限公司 | 一种gltf-json格式数据压缩方法、***及装置 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1552126A (zh) * | 2001-02-05 | 2004-12-01 | 捷通公司 | 压缩文档的结构化描述的方法和*** |
US7412697B2 (en) * | 2003-06-25 | 2008-08-12 | International Business Machines Corporation | High-level language, architecture-independent probe program compiler |
CN101268697A (zh) * | 2005-07-20 | 2008-09-17 | 数码士有限公司 | 编码器和解码器 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及*** |
CN101408849A (zh) * | 2008-12-01 | 2009-04-15 | 中国科学技术大学 | Ttcn-3语言的编译执行方法及*** |
CN101788992A (zh) * | 2009-05-06 | 2010-07-28 | 厦门东南融通***工程有限公司 | 一种数据库查询语句的转换方法和转换*** |
CN101841515A (zh) * | 2009-03-19 | 2010-09-22 | 北京理工大学 | 可变目标的协议数据单元编解码代码自动生成的实现方法 |
US20110302563A1 (en) * | 2010-06-08 | 2011-12-08 | Avaya Inc. | Program structure recovery using multiple languages |
-
2013
- 2013-12-18 CN CN201310698083.1A patent/CN103677952B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1552126A (zh) * | 2001-02-05 | 2004-12-01 | 捷通公司 | 压缩文档的结构化描述的方法和*** |
US7412697B2 (en) * | 2003-06-25 | 2008-08-12 | International Business Machines Corporation | High-level language, architecture-independent probe program compiler |
CN101268697A (zh) * | 2005-07-20 | 2008-09-17 | 数码士有限公司 | 编码器和解码器 |
CN101286132A (zh) * | 2008-06-02 | 2008-10-15 | 北京邮电大学 | 一种基于软件缺陷模式的测试方法及*** |
CN101408849A (zh) * | 2008-12-01 | 2009-04-15 | 中国科学技术大学 | Ttcn-3语言的编译执行方法及*** |
CN101841515A (zh) * | 2009-03-19 | 2010-09-22 | 北京理工大学 | 可变目标的协议数据单元编解码代码自动生成的实现方法 |
CN101788992A (zh) * | 2009-05-06 | 2010-07-28 | 厦门东南融通***工程有限公司 | 一种数据库查询语句的转换方法和转换*** |
US20110302563A1 (en) * | 2010-06-08 | 2011-12-08 | Avaya Inc. | Program structure recovery using multiple languages |
Non-Patent Citations (1)
Title |
---|
陈国松: "通用ASN.1应用模型研究与实现", 《万方数据库》 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104331315A (zh) * | 2014-10-31 | 2015-02-04 | 北京思特奇信息技术股份有限公司 | 一种任意层次json对象的解析与生成方法及*** |
CN104331315B (zh) * | 2014-10-31 | 2017-10-17 | 北京思特奇信息技术股份有限公司 | 一种任意层次json对象的解析与生成方法及*** |
CN107251537A (zh) * | 2015-02-10 | 2017-10-13 | 瑞典爱立信有限公司 | 用于数据中介的方法和装置 |
CN107251537B (zh) * | 2015-02-10 | 2020-07-14 | 瑞典爱立信有限公司 | 用于数据中介的方法和装置 |
CN109255209A (zh) * | 2017-07-13 | 2019-01-22 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、设备和存储介质 |
CN109255209B (zh) * | 2017-07-13 | 2022-05-17 | 阿里巴巴集团控股有限公司 | 一种数据处理方法、装置、设备和存储介质 |
CN109683873A (zh) * | 2018-11-16 | 2019-04-26 | 中国西安卫星测控中心 | 利用asn1规则的航天信息接口编码方法及***架构 |
CN109683873B (zh) * | 2018-11-16 | 2021-10-08 | 中国西安卫星测控中心 | 利用asn1规则的航天信息接口编码方法及***架构 |
CN109656567A (zh) * | 2018-12-20 | 2019-04-19 | 北京树根互联科技有限公司 | 异质化业务数据处理逻辑的动态方法和*** |
CN109656567B (zh) * | 2018-12-20 | 2022-02-01 | 北京树根互联科技有限公司 | 异质化业务数据处理逻辑的动态方法和*** |
CN109933327A (zh) * | 2019-02-02 | 2019-06-25 | 中国科学院计算技术研究所 | 基于代码融合编译框架的OpenCL编译器设计方法和*** |
CN109933327B (zh) * | 2019-02-02 | 2021-01-08 | 中国科学院计算技术研究所 | 基于代码融合编译框架的OpenCL编译器设计方法和*** |
CN111090417B (zh) * | 2019-11-14 | 2023-11-28 | 杭州中恒电气股份有限公司 | 二进制文件解析方法、装置、设备及介质 |
CN111090417A (zh) * | 2019-11-14 | 2020-05-01 | 杭州中恒电气股份有限公司 | 二进制文件解析方法、装置、设备及介质 |
CN112600562A (zh) * | 2020-12-01 | 2021-04-02 | 四川虹美智能科技有限公司 | 编解码方法、装置及计算机可读介质以及物联网设备 |
CN113742294A (zh) * | 2021-08-23 | 2021-12-03 | 宜通世纪科技股份有限公司 | 一种asn.1-per信令消息解码方法、***、装置及介质 |
CN113947071A (zh) * | 2021-10-21 | 2022-01-18 | 北京四方继保工程技术有限公司 | 一种变电站五防文件的解析执行***及方法 |
CN114489682A (zh) * | 2022-04-14 | 2022-05-13 | 北京宝兰德软件股份有限公司 | nginx配置文件的操作方法、装置和设备 |
CN117278053A (zh) * | 2023-11-17 | 2023-12-22 | 南京智盟电力有限公司 | 一种gltf-json格式数据压缩方法、***及装置 |
CN117278053B (zh) * | 2023-11-17 | 2024-02-09 | 南京智盟电力有限公司 | 一种gltf-json格式数据压缩方法、***及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN103677952B (zh) | 2018-05-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103677952A (zh) | 编解码器生成装置及方法 | |
US11334692B2 (en) | Extracting a knowledge graph from program source code | |
CN108885545B (zh) | 用于实时数据流编程语言的工具和方法 | |
Yviquel et al. | Orcc: Multimedia development made easy | |
CN110580147B (zh) | 一种应用程序的开发方法和装置 | |
CN109491658A (zh) | 计算机可执行代码数据的生成方法及装置 | |
CN109255209B (zh) | 一种数据处理方法、装置、设备和存储介质 | |
TWI528288B (zh) | 一種跨平臺轉換應用代碼的方法及裝置 | |
CN110442330A (zh) | 列表组件转换方法、装置、电子设备及存储介质 | |
US8762963B2 (en) | Translation of programming code | |
CN106970820A (zh) | 代码存储方法及代码存储装置 | |
CN108139891A (zh) | 针对外部文件的缺失包括建议 | |
CN111813381A (zh) | 跨平台生成可运行程序的方法、装置、介质和电子设备 | |
CN101185116A (zh) | 在软件程序中使用强数据类型表示语音识别语法 | |
CN110264361A (zh) | 一种区块链的数据解析方法及装置 | |
JP2016085731A (ja) | Jsonドキュメントを表すexiドキュメントを符号化する方法及びコンピュータ可読媒体 | |
CN101799766A (zh) | Widget引擎中使用第三方引擎解析脚本文件的方法和装置 | |
CN115878112A (zh) | 一种多方复杂商业协议智能合约生成***及其生成方法 | |
CN109857458B (zh) | 基于ANTLR的AltaRica 3.0的扁平化的转化方法 | |
US9875088B2 (en) | Optimized compiling of a template function | |
CN112269566B (zh) | 脚本生成处理方法、装置、设备及*** | |
CN102707934A (zh) | 一种以脚本形式表示增值业务流程的实现方法和*** | |
CN102314371A (zh) | 基于可扩展标记语言的编码方法、解码方法及编解码装置 | |
CN116403574A (zh) | 从语音输入到结构化资源的自动域特定受约束解码 | |
Günther | Development of internal domain-specific languages: design principles and design patterns |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |