首页> 中国专利> 适用于ASN.1编译器符号表的转换方法

适用于ASN.1编译器符号表的转换方法

摘要

本发明涉及一种适用于ASN.1编译器符号表的转换方法,其特点是:构成符号表与构成变量表,且符号表的节点为自定义数据类型,能够表达所有可能的数据类型,其内容至少包括,用于将该节点链接进符号表的双向链表头的hdr参数,用于表达ASN.1基本数据类型的枚举类型的kind参数,用于表达类型名称的非空字符串的name参数,用于表达约束的容器的restrict参数,用于包含该符号表项的其他信息的联合容器的extra参数,在上述过程中,对PDU数据格式进行鉴别。由此,能够将ASN.1数据结构转换为一个符号表,可通过对符号表的构建,完成分析过程。并且,采用表格化的流程处理,提高了数据处理效率。

著录项

  • 公开/公告号CN105867991A

    专利类型发明专利

  • 公开/公告日2016-08-17

    原文格式PDF

  • 申请/专利权人 苏州简约纳电子有限公司;

    申请/专利号CN201610177160.2

  • 申请日2016-03-25

  • 分类号

  • 代理机构北京同辉知识产权代理事务所(普通合伙);

  • 代理人刘洪勋

  • 地址 215000 江苏省苏州市工业园区金鸡湖大道1211号国际科技园4期301

  • 入库时间 2023-06-19 00:19:23

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-06-25

    授权

    授权

  • 2016-09-14

    实质审查的生效 IPC(主分类):G06F9/45 申请日:20160325

    实质审查的生效

  • 2016-08-17

    公开

    公开

说明书

技术领域

本发明涉及一种符号表的转换方法,尤其涉及一种适用于ASN.1编译器符号表的转换方法。

背景技术

结合数据类型基本定义来看,ITU为ASN.1定义的基本数据类型包括如下:

1、简单的无约束类型

包括NULL,BOOLEAN,REAL三种数据类型,一旦被声明为该类型,则其编解码方式便确定,不依赖其他条件。

2、简单的有约束类型

包括INTEGER,BIT STRING,OCTET STRING类型,声明为该类型的域可以被约束,或者不被约束。INTEGER可受到数值约束,BIT STRING和OCTET STRING可收到数量约束,其中OCTET STRING还可受到内容约束。

3、复合类型

复合类型是相对简单类型而言的,它定义了一系列成员,包括ENUMERATED,SEQUENCE,SET和CHOICE类型。ENUMERATED的每一个成员都是一个枚举项,有确定的值,SEQUENCE是有序的成员组合,SET是无序的成员组合,CHOICE定义了一系列成员,但同时只有一个成员有效。

并且,SEQUENCE和SET的成员可以定义为可选,CHOICE不可以。SEQUENCE/SET/CHOICE的每一个成员都由成员名和成员类型组成,类型的声明可以是一个其他地方定义的类型名称,例如:

name TypeOfName

TypeOfName::=BIT STRING

或者,是一个完整的类型定义(无类型名称的隐含定义),例如:

name BIT STRING

称这种定义方法为NameType定义。

同时,复合类型均可定义为可扩展的类型,所谓可扩展就是指在进行版本 演进时可以对数据类型就行成员的增加,定义方式是将其成员分成两组:基本成员组和扩展成员组。基本成员组为不可扩展的成员,一旦定义用不修改,扩展成员组成员可随着版本演进时增加。两个成员组在定义时用“…”符号分割,例如:

SEQUENCE/SET/CHOICE的扩展成员除了可以用NameType进行定义外,如果一个版本扩展了多个成员,还可以用[[ ]]符号将本次扩展的这些NameType成员包含起来,作为一个独立扩展,例如:

以[[ ]]符号包含起来的部分成为VERSION扩展。

4、数组类型

SEQUENCE OF和SET OF两种数据类型都定义了一个动态的元素数据类型相同的数组。数组元素数量可以不被约束,或者受到数量约束。

5、其他数据类型

其他没有覆盖到的数据类型由于不常用,本发明的处理方法可以忽略。

并且,上文中提到的约束有以下几种:

1、数值约束,该约束用于定义INTEGER的取值范围。

一个独立的取值范围的定义由上限ub和下限lb组成。lb和ub可以给出,也可以不给出,如果不给出lb,则下限为负无穷,如果不给出ub,则下限为正无穷。

如果取值范围为一个固定值,则lb和ub相等。数值约束必须包含一个基本取值范围,可以包含一个扩展取值范围。

2、数量约束。

数量约束定义与数值约束基本相同,不同之处在于其取值范围要求为非负数。

3、内容约束。

内容约束用于OCTET STRING,用于表示该字节流包含的内容是约束指定的数据类型。

进一步来看,ASN.1文法定义数值有两种方式:

1、显式定义,采用直接数的方式,例如:BIT STRING(SIZE(1..5))。

2、隐式定义,引用其他地方定义的一个数值变量,例如:

BIT STRING(SIZE(1..MaxValue))

MaxValue INTEGER::=5

以上描述了ASN.1语法在实际应用过程中最常见的一些语法定义规则。在根据这些语法规则定义了所需的数据格式后,计算机无法根据这些语法标记对数据进行编码和解码,需要先采用ASN.1专用编译器对语法进行分析,提炼出每个定义的数据类型属性,并以数据化的形式进行描述,以供编解码程序进行调用。

为此,本设计人积极加以研究创新,以期创设一种结构简单,且容易扩展的,适用于ASN.1编译器的符号表设计方案,使其更具有产业上的利用价值。

发明内容

为解决上述技术问题,本发明的目的是提供一种适用于ASN.1编译器符号表的转换方法。

本发明的适用于ASN.1编译器符号表的转换方法,其特征在于:

构成符号表,定义一个双向链表,将每一个ASN.1文法定义的数据类型作为一个节点,按照文法定义的顺序加入到链表中,每一个符号表项有独立的名称,

构成变量表,定义一个双向链表,将每一个ASN.1文法定义的数值变量作为一个节点,按照文法定义的顺序加入到链表中,且变量表项包含了该变量的数值和类型,

所述符号表的节点为自定义数据类型,能够表达所有可能的数据类型,其内容包括,

用于将该节点链接进符号表的双向链表头,表示为hdr参数,

用于表达ASN.1基本数据类型的枚举类型,表示为kind参数,

用于表达类型名称的非空字符串,表示为name参数,

用于表达约束的容器,表示为restrict参数,

用于包含该符号表项的其他信息的联合容器,表示为extra参数,

在上述过程中,对PDU数据格式进行鉴别。

进一步地,上述的适用于ASN.1编译器符号表的转换方法,其中,所述kind参数中增设有用于实现数据定位的自定义的QUOTE类型。

更进一步地,上述的适用于ASN.1编译器符号表的转换方法,其中,所述name参数,

若其类型为显式定义,则将name参数定义为显式的类型名称;

若其类型为隐式定义,则将name参数定义为与其类型相关联的字符串。

更进一步地,上述的适用于ASN.1编译器符号表的转换方法,其中,所述restrict参数,采用type参数表示约束类型。

若其约束为数值或是数量约束,采用bExtend参数表示该约束是否可扩展的布尔值,采用basic参数表示基本取值范围,采用ext参数表示扩展取值范围,

所述basic参数中还包括lb参数定义和ub参数定义,如果lb参数定义或是ub参数定义为空,则表示lb参数定义或是ub参数定义未定义;

所述ext参数中还包括lb参数定义和ub参数定义,如果lb参数定义或是ub参数定义为空,则表示lb参数定义或是ub参数定义未定义;

若其约束为CONTAINING约束,则name参数为CONTAINING约束的目标类型名称。

更进一步地,上述的适用于ASN.1编译器符号表的转换方法,其中,所述符号表项为SEQUENCE,或是为CHOICE,或是为SET,则extra参数应包含可扩展列表,该可扩展列表包含basic和ext两个子列表,所述basic为独立的成员列表,ext为双向链表,该链表的每一项都是一个独立的成员列表。

更进一步地,上述的适用于ASN.1编译器符号表的转换方法,其中,所述成员列表设置有类别标识,所述类别标识包含基本成员、NameType扩展成员、VERSION扩展成员,

所述成员列表中的每一个成员表项Member参数都是一个NameType声明,所述NameType声明包含成员名称、成员类型、是否可选、默认值,所述成员列表设有扩展项,

若所述扩展项是一个NameType声明,则成员列表只有一项,

若扩展项是一个VERSION扩展,则将包含多个成员。

更进一步地,上述的适用于ASN.1编译器符号表的转换方法,其中,所述符号表项为ENUMERATED,则extra参数包含一个可扩展列表,所述可扩展列表包括basic参数构成的双向链表和ext参数构成的双向链表,每一个链表项都是一个枚举声明,所述枚举声明的内容至少包括有枚举名称、枚举值。

更进一步地,上述的适用于ASN.1编译器符号表的转换方法,其中,所述符号表项为SEQUENCE OF或是SET OF,则extra参数包含一个符号链接,该符号链接包含一个字符串参数name和符号表引用参数sym,name为目标类型的名称,sym为指向目标符号表项的引用(或指针)。

再进一步地,上述的适用于ASN.1编译器符号表的转换方法,其中,所述PDU数据格式进行鉴别方法如下,

为每一个符号表项增加一个引用标记,记为bQuoted参数,所述bQuoted参数的默认值为0,在ASN.1文法扫描并建立好符号表后,对符号表中的符号逐个进行链接,

若符号表项类型为OCTET STRING,且被CONTAINING约束进行约束,根据约束目标类型名称查找符号表,若找到,则将目标符号表项的bQuoted参数设置为1;

若符号表项类型为QUOTE,则根据其类型的名称查找符号表,若找到,则将目标符号表项的bQuoted参数设置为1;

若符号表项为SEQUENCE OF或是SET OF,则根据其目标类型的名称查找符号表,若找到,则将目标符号表项的bQuoted参数设置为1;

若符号表项为SEQUENCE,或是CHOICE,或是SET,则对其声明的每一个成员进行遍历,若成员类型声明为一个类型名称,则根据该名称查找符号表,若找到,则将目标符号表项的bQuoted参数设置为1;

遍历完成后,所有bQuoted参数标志为0的符号表项所代表的数据类型,即可被视为一个PDU数据格式。

借由上述方案,本发明至少具有以下优点:

1、在翻译过程中,将ASN.1数据结构转换为一个符号表,可通过对符号表的构建,完成分析过程。

2、采用表格化的流程处理,提高了数据处理效率。

3、符号表的结构也就是目标类型的结构,从而可以直观地理解和生成所需要的数据类型。

4、适用于ASN.1支持先引用后声明的特性,为编译错误侦测提供了条件。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,并可依照说明书的内容予以实施,以下以本发明的较佳实施例并配合附图详细说明如后。

附图说明

图1是restrict参数约束为数值或数量约束的表现形式示意图。

图2是CONTAINING约束的表现形式示意图。

图3是如果符号表项为SEQUENCE/CHOICE/SET时,extra参数构成的可扩展列表的示意图。

图4是符号表项为ENUMERATED时,extra参数构成的可扩展列表的示意图。

图5是符号表项为SEQUENCE OF/SET OF时,extra参数构成的可扩展列表的示意图。

图6是3GPP LTE RRC的消息定义的结构关系图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

如图1至5的适用于ASN.1编译器符号表的转换方法,其与众不同之处在于:

构成符号表,定义一个双向链表,将每一个ASN.1文法定义的数据类型作为一个节点,按照文法定义的顺序加入到链表中,每一个符号表项有独立的名称。同时,还需要构成变量表,定义一个双向链表,将每一个ASN.1文法定义的数值变量作为一个节点,按照文法定义的顺序加入到链表中,且变量表项包含了该变量的数值和类型。

具体来说,为了便于理解,以C语言描述相应数据结构,并自定义u8。本发明所采用的符号表的节点为自定义数据类型,能够表达所有可能的数据类型,其结构如下:

其中,包括有:

hdr参数,用于将该节点链接进符号表的双向链表头。结合实施的实施来看,该hdr参数的类型可声明如下:

kind参数,用于表达ASN.1基本数据类型的枚举类型。在实施的时候,该kind参数可以为NULL、INTEGER等等。并且,为了有效贴合ASN.1的特性,可以在kind参数中增设有用于实现数据定位的自定义的QUOTE类型。此QUOTE类型的用途如下,ASN.1文法支持数据类型的先引用后定义,例如:

Type1::=Type2

Type2INTEGER

结合实际实施来看,由于翻译过程是顺序的,所以在Type2第一次出现时,可假定其是一个其他地方定义好的类型。在完成Type2定义的扫描后,才能确定Type1的类型。由此,定义QUOTE类型,使得在需要一个类型定义的地方出现了一个类型名称时,将其名称保存下来。待翻译器文法扫描完成后,再对所有QUOTE类型符号表项进行一次定位。此定位可以在在符号表中,根据类型名称进行查找。

name参数,用于表达类型名称的非空字符串。在实际实施的时候,若其类 型为显式定义,则将name参数定义为显式的类型名称。若其类型为隐式定义,则将name参数定义为与其类型相关联的独一无二的字符串。由此,能够为每一种基本类型建立一个计数器。这样,每次出现一个隐式定义的类型,则将计数器增1,配合类型字符串形成一个名称。例如,可以采用如下内容:

_STD_INTEGER_12_,_STD_SEQUENCE_21。

restrict参数,用于表达约束的容器,采用type参数表示约束类型。

若其约束为数值或数量约束,则表现形式可如图1所示。具体来说,采用bExtend参数表示该约束是否可扩展的布尔值,采用basic参数表示一个基本取值范围(换句话说,basic参数本身就是数值范围容器),采用ext参数表示扩展取值范围。同时,basic参数中还包括lb参数定义和ub参数定义,如果lb参数定义或是ub参数定义为空,则表示lb参数定义或是ub参数定义未定义。并且,ext参数中还包括lb参数定义和ub参数定义,如果lb参数定义或是ub参数定义为空,则表示lb参数定义或是ub参数定义未定义。

若restrict参数约束为CONTAINING约束,则其表现形式如图2所示。其name参数为CONTAINING约束的目标类型名称。由于ASN.1支持先引用后定义的特性,在解析CONTAINING约束时,目标类型可能不存在于符号表中,所以先记录其名称,在后续的分析过程中,根据name将sym项链接到目标符号表项。

extra参数,用于包含该符号表项的其他信息的联合容器,其表现形式入图3所示。其中,符号表项为SEQUENCE,或是为CHOICE,或是为SET,则extra参数应包含可扩展列表,该可扩展列表包含basic和ext两个子列表,basic为独立的成员列表,ext为双向链表,该链表的每一项都是一个独立的成员列表。并且,成员列表设置有类别标识,类别标识包含基本成员、NameType扩展成员、VERSION扩展成员。

具体来说,所采用的成员列表中的每一个成员表项Member参数都是一个NameType声明,NameType声明包含成员名称、成员类型、是否可选、默认值等信息。同时,成员列表设有扩展项,若扩展项是一个NameType声明,则成员列表只有一项,如果扩展项是一个VERSION扩展,则将包含多个成员。

若符号表项为ENUMERATED,则extra参数包含一个可扩展列表,其如图4所示。其包括basic参数构成的双向链表和ext参数构成的双向链表,每一个链表项都是一个枚举声明,枚举声明的内容至少包括有枚举名称、枚举值等。

若符号表项为SEQUENCE OF或是SET OF,则extra参数包含一个符号链接,其如图5所示。具体来说,其name参数为目标类型的名称。由于ASN.1支持先引用后定义的特性,在解析时,目标类型可能不存在于符号表中,所以先记录其名称,在后续的分析过程中,根据name将sym项链接到目标符号表项。

并且,结合ASN.1的特性来看,ASN.1文法的目标是定义通讯过程中的一系列PDU数据格式,只有这些PDU才有必要作为编解码的入口。因此,本发明实施的在上述过程中,可对PDU数据格式进行鉴别,提升处理效率。

具体来说,为每一个符号表项增加一个引用标记,记为bQuoted参数,bQuoted参数的默认值为0,在ASN.1文法扫描并建立好符号表后,对符号表中的符号逐个进行链接。接着,进行符号表项类型判别,其过程如下:

若符号表项类型为OCTET STRING,且被CONTAINING约束进行约束,根据约束目标类型名称查找符号表,若找到,则将目标符号表项的bQuoted参数设置为1;

若符号表项类型为QUOTE,则根据其类型的名称查找符号表,若找到,则将目标符号表项的bQuoted参数设置为1;

若符号表项为SEQUENCE OF或是SET OF,则根据其目标类型的名称查找符号表,若找到,则将目标符号表项的bQuoted参数设置为1;

若符号表项为SEQUENCE,或是CHOICE,或是SET,则对其声明的每一个成员进行遍历,若成员类型声明为一个类型名称,则根据该名称查找符号表,若找到,则将目标符号表项的bQuoted参数设置为1;

遍历完成后,所有bQuoted参数标志为0的符号表项所代表的数据类型,即可被视为一个PDU数据格式。

再结合实际的实施来看,在3GPP LTE RRC的消息定义中:

由此,这段代码声明的显示类型包括如下:

1、BCCH-BCH-Message;

2、BCCH-BCH-MessageType;

3、MasterInformationBlock;

4、PHICH-Config。

声明的隐式类型有:

5、ENUMERATED{n6,n15,n25,n50,n75,n100};

6、BIT STRING(SIZE(8));

7、BIT STRING(SIZE(10));

8、ENUMERATED{normal,extended};

9、ENUMERATED{oneSixth,half,one,two};

其结构关系可如图6所示。

在此示例中,只有数据类型1引用了其他数据类型却没有被其他类型所引用(也就是为根节点),故其bQuoted标志应为0,即是一个PDU定义入口。

通过上述的文字表述并结合附图可以看出,采用本发明后,拥有如下优点:

1、在翻译过程中,将ASN.1数据结构转换为一个符号表,可通过对符号表的构建,完成分析过程。

2、采用表格化的流程处理,提高了数据处理效率。

3、符号表的结构也就是目标类型的结构,从而可以直观地理解和生成所需要的数据类型。

4、适用于ASN.1支持先引用后声明的特性,为编译错误侦测提供了条件。

以上所述仅是本发明的优选实施方式,并不用于限制本发明,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变型,这些改进和变型也应视为本发明的保护范围。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号