ASN.1编译过程中重复定义数据结构的去除方法技术

技术编号:16365357 阅读:89 留言:0更新日期:2017-10-10 21:20
本发明专利技术涉及一种可以避免编译出错、降低数据冗余的ASN.1编译过程中重复定义数据结构的去除方法,包括步骤:S1、在进行ASN.1的语法分析时,假设所有合法的数据类型定义都会被当作一个符号表项,存放在一个符号数据表中;S2、在数据类型定义A被插入符号表之前,对所述符号数据表进行查找是否存在相同基本类型的表项B,如果存在,则将数据类型定义A抛弃,以B来替代。

A method for repeatedly defining data structures during ASN.1 compilation

The invention relates to a compiler error can be avoided and reduce data redundancy in the process of compiling ASN.1 repeat the definition of the data structure removal method comprises the steps of: S1, ASN.1 syntax analysis, assuming that all legitimate data type definition will be used as a table of symbols, symbols stored in a data table; S2, before the data type definition A is inserted into the symbol table of the symbol data table lookup table the same basic type of B, whether there exists if the data type definition, A abandoned and replaced it with B.

【技术实现步骤摘要】
ASN.1编译过程中重复定义数据结构的去除方法
本专利技术涉及一种ASN.1编译技术,尤其涉及一种ASN.1编译过程中重复定义数据结构的去除方法。
技术介绍
目前,ASN.1文法在应用中,常常会出现数据结构的重复定义,例如在LTERRC的PDU定义中,根据我们的统计,在LTERRCC60版本协议中,定义了2273个数据类型,其中有518个数据类型重复定义,几乎占了1/4。如果编译器不对其进行优化处理,会带来以下问题:1、出现重名情况,以ASN.1的C语言翻译器为例,一般会将ENUMERATED{true}翻译为枚举类型:typedefenum{true}EnumName,这样所有出现ENUMERATED{true}的地方都会产生一个上述声明,true就会被多次定义从而导致编译出错;2、大量的数据冗余,ASN.1翻译器一般将其语法翻译成一种目标平台的数据类型描述,供编解码库调用,大量冗余的重复声明必然会导致大量冗余的描述数据。有鉴于上述的缺陷,本设计人,积极加以研究创新,以期创设一种ASN.1编译过程中重复定义数据结构的去除方法,使其更具有产业上的利用价值。
技术实现思路
为解决上述技术问题,本专利技术的目的是提供一种可以避免编译出错、降低数据冗余的ASN.1编译过程中重复定义数据结构的去除方法。本专利技术的ASN.1编译过程中重复定义数据结构的去除方法,包括以下步骤:S1、在进行ASN.1的语法分析时,假设所有合法的数据类型定义都会被当作一个符号表项,存放在一个符号数据表中;S2、在数据类型定义A被插入符号数据表之前,对所述符号数据表进行查找是否存在相同基本类型的表项B,其中,所述相同基本类型的表项B必须与A具有相同的基本数据类型,且满足以下条件之一:S21、数据类型定义为NULL或BOOLEAN;S22、数据类型定义为INTEGER,且A和B均无数值约束定义,或数值约束定义相同;S23、数据类型定义为BITSTRING,且A和B均无数量约束定义,或数量约束定义相同;S24、数据类型定义为OCTETSTRING,且a)、A和B均无约束定义,或;b)、A和B均定义为数量约束,且数量约束定义相同,或;c)、A和B均定义为CONTAINING约束,且约束目标类型相同;S25、数据类型定义为ENUMERATED,且枚举列表中枚举项名称、取值均相同;S26、数据类型定义为SEQUENCE,且成员定义顺序、名称、成员类型、成员的可选性质(如果有定义)和默认值(如果有定义)均相同;S27、数据类型定义为CHOICE,且成员定义顺序、名称、成员类型均相同;S28、数据类型定义为SET,且成员名称、TAG和成员类型均相同;S29、数据类型定义为SEQUENCEOF或SETOF,且数量约束和列表元素类型定义相同,则将数据类型定义A抛弃,以B来替代。进一步的,所述步骤S2中数值和数量约束定义是否相同的判断标准为:1)、基本取值范围相同;2)、可扩展性相同(均可扩展,或均不可扩展);3)、如果任意一方有定义扩展取值范围,则双方都应定义,且扩展取值范围相同。进一步的,所述取值范围是否相同的判断标准为:1)、如果任意一方有定义lb,则双方均应定义,且lb值相同;2)、如果任意一方有定义ub,则双方均应定义,且ub值相同。进一步的,所述lb或ub值是否相同的判断标准为:1)、lb或ub均被定义为一个显式数值,或者均被定义为一个ASN.1变量名;2)、如果lb和ub被定义为一个ASN.1变量名,则该变量名必须完全一致;3)、如果lb和ub被定义为一个显式数值,则其数值必须相等。进一步的,所述步骤S2中SEQUENCE/CHOICE/SET的成员类型和SEQUENCEOF/SETOF的列表元素类型定义是否相同的判断标准为:1)对比较双方来说,如果成员/元素是一个隐式定义的新类型,则先将该类型定义进行语法解析,并形成符号表项,按照上述方式进行符号去重,并得到一个符号表项引用,并视该符号表项引用所对应的数据类型名称为成员类型名称;2)比较双方成员名称是否相同。借由上述方案,本专利技术至少具有以下优点:1、ASN.1编译器的目的之一是对ASN.1语法进行翻译,并生成目标平台的数据类型声明;有些平台的数据类型声明不允许重复,例如C语言的枚举名称;本专利技术通过去除重复定义的数据类型,则可以使得目标平台仅产生一份数据类型声明,从而避免了目标平台在使用这些数据类型声明时产生编译错误的可能。2、ASN.1编译器最终需要对每一个数据类型进行数据化描述,对于定义完全相同的数据类型,其数据化描述也是完全相同的,在不去除重复定义的情况下,同样的描述就会出现多份;本专利技术通过去重操作,可以减少描述数据量,降低编译器输出的数据冗余。上述说明仅是本专利技术技术方案的概述,为了能够更清楚了解本专利技术的技术手段,并可依照说明书的内容予以实施,以下以本专利技术的较佳实施例详细说明如后。具体实施方式下面结合实施例,对本专利技术的具体实施方式作进一步详细描述。以下实施例用于说明本专利技术,但不用来限制本专利技术的范围。本专利技术一较佳实施例的ASN.1编译过程中重复定义数据结构的去除方法,包括以下步骤:S1、在进行ASN.1的语法分析时,假设所有合法的数据类型定义都会被当作一个符号表项,存放在一个符号数据表中;S2、在数据类型定义A被插入符号数据表之前,对符号数据表进行查找是否存在相同基本类型的表项B,其中,相同基本类型的表项B必须与A具有相同的基本数据类型,且满足以下条件之一:S21、数据类型定义为NULL或BOOLEAN;S22、数据类型定义为INTEGER,且A和B均无数值约束定义,或数值约束定义相同;S23、数据类型定义为BITSTRING,且A和B均无数量约束定义,或数量约束定义相同;S24、数据类型定义为OCTETSTRING,且a)、A和B均无约束定义,或;b)、A和B均定义为数量约束,且数量约束定义相同,或;c)、A和B均定义为CONTAINING约束,且约束目标类型相同;S25、数据类型定义为ENUMERATED,且枚举列表中枚举项名称、取值均相同;S26、数据类型定义为SEQUENCE,且成员定义顺序、名称、成员类型、成员的可选性质(如果有定义)和默认值(如果有定义)均相同;S27、数据类型定义为CHOICE,且成员定义顺序、名称、成员类型均相同;S28、数据类型定义为SET,且成员名称、TAG和成员类型均相同;S29、数据类型定义为SEQUENCEOF或SETOF,且数量约束和列表元素类型定义相同,则将数据类型定义A抛弃,以B来替代。为了便于判断步骤S2中数值和数量约束定义是否相同,本实施例设置了如下判断标准:1)、基本取值范围相同;2)、可扩展性相同(均可扩展,或均不可扩展);3)、如果任意一方有定义扩展取值范围,则双方都应定义,且扩展取值范围相同;这样,当A和B同时满足以上三点时,即可判断A和B的数值和数量约束定义相同。为了便于判断上述取值范围是否相同,又设置了如下判断标准为:1)、如果任意一方有定义lb,则双方均应定义,且lb值相同;2)、如果任意一方有定义ub,则双方均应定义,且ub值相同。这样,当A和B同时满足上述两点时,即可判断A和B的取值范围相同。为了便于判断上述lb或ub本文档来自技高网...

【技术保护点】
一种ASN.1编译过程中重复定义数据结构的去除方法,其特征在于:包括以下步骤:S1、在进行ASN.1的语法分析时,假设所有合法的数据类型定义都会被当作一个符号表项,存放在一个符号数据表中;S2、在数据类型定义A被插入符号表之前,对所述符号数据表进行查找是否存在相同基本类型的表项B,其中,所述相同基本类型的表项B必须与A具有相同的基本数据类型,且满足以下条件之一:S21、数据类型定义为NULL或BOOLEAN;S22、数据类型定义为INTEGER,且A和B均无数值约束定义,或数值约束定义相同;S23、数据类型定义为BIT STRING,且A和B均无数量约束定义,或数量约束定义相同;S24、数据类型定义为OCTET STRING,且a)、A和B均无约束定义,或;b)、A和B均定义为数量约束,且数量约束定义相同,或;c)、A和B均定义为CONTAINING约束,且约束目标类型相同;S25、数据类型定义为ENUMERATED,且枚举列表中枚举项名称、取值均相同;S26、数据类型定义为SEQUENCE,且成员定义顺序、名称、成员类型、成员的可选性质和默认值均相同;S27、数据类型定义为CHOICE,且成员定义顺序、名称、成员类型均相同;S28、数据类型定义为SET,且成员名称、TAG和成员类型均相同;S29、数据类型定义为SEQUENCE OF或SET OF,且数量约束和列表元素类型定义相同,则将数据类型定义A抛弃,以B来替代。...

【技术特征摘要】
1.一种ASN.1编译过程中重复定义数据结构的去除方法,其特征在于:包括以下步骤:S1、在进行ASN.1的语法分析时,假设所有合法的数据类型定义都会被当作一个符号表项,存放在一个符号数据表中;S2、在数据类型定义A被插入符号表之前,对所述符号数据表进行查找是否存在相同基本类型的表项B,其中,所述相同基本类型的表项B必须与A具有相同的基本数据类型,且满足以下条件之一:S21、数据类型定义为NULL或BOOLEAN;S22、数据类型定义为INTEGER,且A和B均无数值约束定义,或数值约束定义相同;S23、数据类型定义为BITSTRING,且A和B均无数量约束定义,或数量约束定义相同;S24、数据类型定义为OCTETSTRING,且a)、A和B均无约束定义,或;b)、A和B均定义为数量约束,且数量约束定义相同,或;c)、A和B均定义为CONTAINING约束,且约束目标类型相同;S25、数据类型定义为ENUMERATED,且枚举列表中枚举项名称、取值均相同;S26、数据类型定义为SEQUENCE,且成员定义顺序、名称、成员类型、成员的可选性质和默认值均相同;S27、数据类型定义为CHOICE,且成员定义顺序、名称、成员类型均相同;S28、数据类型定义为SET,且成员名称、TAG和成员类型均相同;S29、数据类型定义为SEQUENCEOF或SETOF,且数量约束和列表元素类型定义相同,则将数据类型定义A抛弃,以B来替代。2.根据权利要求1所述的...

【专利技术属性】
技术研发人员:江国庆陈林康张建立潘玉峰杨鹏
申请(专利权)人:苏州简约纳电子有限公司
类型:发明
国别省市:江苏,32

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1