一种通信PDU编解码器自动生成方法及系统技术方案

技术编号:34611025 阅读:70 留言:0更新日期:2022-08-20 09:16
本发明专利技术提供了通信技术领域的一种通信PDU编解码器自动生成方法及系统,方法包括如下步骤:步骤S10、定义一包括PDU名、成员名以及成员类型的PDU结构,基于所述PUD结构创建PDU定义文件;步骤S20、对所述PDU定义文件进行语法分析,得到抽象语法树;步骤S30、创建一全局符号表,基于所述抽象语法树更新全局符号表,对所述全局符号表进行语义分析,得到语义分析结果;步骤S40、基于所述抽象语法树以及语义分析结果自动生成PDU编解码器的代码。本发明专利技术的优点在于:极大的提升了PDU编解码器生成的质量、效率以及泛化性。效率以及泛化性。效率以及泛化性。

【技术实现步骤摘要】
一种通信PDU编解码器自动生成方法及系统


[0001]本专利技术涉及通信
,特别指一种通信PDU编解码器自动生成方法及系统。

技术介绍

[0002]协议数据单元PDU(Protocol Data Unit)指通信领域中,在网络上传输的单个数据单元,一个PDU由具体协议相关的控制信息与用户数据组合而成。不同协议有不同格式的PDU,相关的开发人员需要根据协议要求编写PDU的编解码器(编解码程序)来正确传输数据。PDU可以是文本形式或二进制形式,二进制形式的PDU因其节约带宽的特性在通信领域的标准中广泛使用,例如TETRA和3GPP。
[0003]目前,很多PDU编解码器的代码是根据协议来手动编写的,当协议庞大复杂时会有大量的工作量,而且容易出错带来安全隐患,虽然也存在一些自动生成编解码器的工具,但这些工具存在各种局限性,很难与一些广泛使用的标准相容。
[0004]因此,如何提供一种通信PDU编解码器自动生成方法及系统,实现提升PDU编解码器生成的质量、效率以及泛化性,成为一个亟待解决的技术问题。

技术实现思路

[0005]本专利技术要解决的技术问题,在于提供一种通信PDU编解码器自动生成方法及系统,实现提升PDU编解码器生成的质量、效率以及泛化性。
[0006]第一方面,本专利技术提供了一种通信PDU编解码器自动生成方法,包括如下步骤:
[0007]步骤S10、定义一包括PDU名、成员名以及成员类型的PDU结构,基于所述PUD结构创建PDU定义文件;
[0008]步骤S20、对所述PDU定义文件进行语法分析,得到抽象语法树;
[0009]步骤S30、创建一全局符号表,基于所述抽象语法树更新全局符号表,对所述全局符号表进行语义分析,得到语义分析结果;
[0010]步骤S40、基于所述抽象语法树以及语义分析结果自动生成PDU编解码器的代码。
[0011]进一步地,所述步骤S10中,所述成员类型包括整数类型、数组类型以及引用类型。
[0012]进一步地,所述步骤S20具体为:
[0013]基于所述PDU结构编写PDU定义文件对应LALR.g4格式的语法文件,通过ANTLR4读取所述语法文件生成PDU编解码器的前端代码;
[0014]通过所述前端代码将输入PDU定义文件的字节流,基于词法分析转换为词元序列,将各所述词元序列组合生成抽象语法树;
[0015]所述抽象语法树包括若干个常量节点以及PDU节点,所述常量节点由常量构成,所述PDU节点由PDU定义文件构成。
[0016]进一步地,所述步骤S30具体包括:
[0017]步骤S31、创建一全局符号表,通过ANTLR4的visitor模式遍历所述抽象语法树,遍历到常量时直接存储至所述全局符号表,遍历到所述PDU定义文件时,创建所述PDU定义文
件对应的子符号表并存储至全局符号表;
[0018]步骤S32、遍历各所述PDU定义文件的各成员并加入对应的子符号表;
[0019]步骤S33、对所述全局符号表进行静态语义分析,得到语义分析结果。
[0020]进一步地,所述步骤S40具体包括:
[0021]步骤S41、创建一头文件,遍历所述抽象语法树的常量节点得到对应的常量,将所述常量作为宏定义保存到头文件,基于所述头文件为每一个类型的PDU定义文件分配一结构体;
[0022]步骤S42、遍历所述抽象语法树的PDU节点,得到各所述PDU定义文件的成员,将各所述成员的成员类型转换为目标程序语言后添加至结构体中;
[0023]步骤S43、基于所述语义分析结果,为每一个类型的PDU定义文件自动生成一用于将结构体转换为二进制字符串的编码函数以及一用于将二进制字符串转换为结构体的解码函数,基于所述编码函数以及解码函数自动生成PDU编解码器的代码。
[0024]第二方面,本专利技术提供了一种通信PDU编解码器自动生成系统,包括如下模块:
[0025]PDU定义文件创建模块,用于定义一包括PDU名、成员名以及成员类型的PDU结构,基于所述PUD结构创建PDU定义文件;
[0026]语法分析模块,用于对所述PDU定义文件进行语法分析,得到抽象语法树;
[0027]语义分析模块,用于创建一全局符号表,基于所述抽象语法树更新全局符号表,对所述全局符号表进行语义分析,得到语义分析结果;
[0028]PDU编解码器生成模块,用于基于所述抽象语法树以及语义分析结果自动生成PDU编解码器的代码。
[0029]进一步地,所述PDU定义文件创建模块中,所述成员类型包括整数类型、数组类型以及引用类型。
[0030]进一步地,所述语法分析模块具体为:
[0031]基于所述PDU结构编写PDU定义文件对应LALR.g4格式的语法文件,通过ANTLR4读取所述语法文件生成PDU编解码器的前端代码;
[0032]通过所述前端代码将输入PDU定义文件的字节流,基于词法分析转换为词元序列,将各所述词元序列组合生成抽象语法树;
[0033]所述抽象语法树包括若干个常量节点以及PDU节点,所述常量节点由常量构成,所述PDU节点由PDU定义文件构成。
[0034]进一步地,所述语义分析模块具体包括:
[0035]全局符号表创建单元,用于创建一全局符号表,通过ANTLR4的visitor模式遍历所述抽象语法树,遍历到常量时直接存储至所述全局符号表,遍历到所述PDU定义文件时,创建所述PDU定义文件对应的子符号表并存储至全局符号表;
[0036]子符号表更新单元,用于遍历各所述PDU定义文件的各成员并加入对应的子符号表;
[0037]语义分析结果生成单元,用于对所述全局符号表进行静态语义分析,得到语义分析结果。
[0038]进一步地,所述PDU编解码器生成模块具体包括:
[0039]结构体生成单元,用于创建一头文件,遍历所述抽象语法树的常量节点得到对应
的常量,将所述常量作为宏定义保存到头文件,基于所述头文件为每一个类型的PDU定义文件分配一结构体;
[0040]结构体填充单元,用于遍历所述抽象语法树的PDU节点,得到各所述PDU定义文件的成员,将各所述成员的成员类型转换为目标程序语言后添加至结构体中;
[0041]代码生成单元,用于基于所述语义分析结果,为每一个类型的PDU定义文件自动生成一用于将结构体转换为二进制字符串的编码函数以及一用于将二进制字符串转换为结构体的解码函数,基于所述编码函数以及解码函数自动生成PDU编解码器的代码。
[0042]本专利技术的优点在于:
[0043]通过定义PDU结构,用户基于PUD结构创建PDU定义文件,再对PDU定义文件进行语法分析得到抽象语法树,接着基于抽象语法树更新创建的全局符号表,对全局符号表进行语义分析得到语义分析结果,最后基于抽象语法树以及语义分析结果即可自动生成PDU编解码器的代码,即用户仅需创本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种通信PDU编解码器自动生成方法,其特征在于:包括如下步骤:步骤S10、定义一包括PDU名、成员名以及成员类型的PDU结构,基于所述PUD结构创建PDU定义文件;步骤S20、对所述PDU定义文件进行语法分析,得到抽象语法树;步骤S30、创建一全局符号表,基于所述抽象语法树更新全局符号表,对所述全局符号表进行语义分析,得到语义分析结果;步骤S40、基于所述抽象语法树以及语义分析结果自动生成PDU编解码器的代码。2.如权利要求1所述的一种通信PDU编解码器自动生成方法,其特征在于:所述步骤S10中,所述成员类型包括整数类型、数组类型以及引用类型。3.如权利要求1所述的一种通信PDU编解码器自动生成方法,其特征在于:所述步骤S20具体为:基于所述PDU结构编写PDU定义文件对应LALR.g4格式的语法文件,通过ANTLR4读取所述语法文件生成PDU编解码器的前端代码;通过所述前端代码将输入PDU定义文件的字节流,基于词法分析转换为词元序列,将各所述词元序列组合生成抽象语法树;所述抽象语法树包括若干个常量节点以及PDU节点,所述常量节点由常量构成,所述PDU节点由PDU定义文件构成。4.如权利要求1所述的一种通信PDU编解码器自动生成方法,其特征在于:所述步骤S30具体包括:步骤S31、创建一全局符号表,通过ANTLR4的visitor模式遍历所述抽象语法树,遍历到常量时直接存储至所述全局符号表,遍历到所述PDU定义文件时,创建所述PDU定义文件对应的子符号表并存储至全局符号表;步骤S32、遍历各所述PDU定义文件的各成员并加入对应的子符号表;步骤S33、对所述全局符号表进行静态语义分析,得到语义分析结果。5.如权利要求1所述的一种通信PDU编解码器自动生成方法,其特征在于:所述步骤S40具体包括:步骤S41、创建一头文件,遍历所述抽象语法树的常量节点得到对应的常量,将所述常量作为宏定义保存到头文件,基于所述头文件为每一个类型的PDU定义文件分配一结构体;步骤S42、遍历所述抽象语法树的PDU节点,得到各所述PDU定义文件的成员,将各所述成员的成员类型转换为目标程序语言后添加至结构体中;步骤S43、基于所述语义分析结果,为每一个类型的PDU定义文件自动生成一用于将结构体转换为二进制字符串的编码函数以及一用于将二进制字符串转换为结构体的解码函数,基于所述编码函数以及解码函数自动生成PDU编解码器的代码。6.一种通信PDU编解码器自动生成系统,其特征在于:包括如下模块:PDU定义文件...

【专利技术属性】
技术研发人员:赵泽钧
申请(专利权)人:福建新大陆通信科技股份有限公司
类型:发明
国别省市:

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

1