CN113687817B - 一种消息格式解析器及解析方法 - Google Patents

一种消息格式解析器及解析方法 Download PDF

Info

Publication number
CN113687817B
CN113687817B CN202110935201.0A CN202110935201A CN113687817B CN 113687817 B CN113687817 B CN 113687817B CN 202110935201 A CN202110935201 A CN 202110935201A CN 113687817 B CN113687817 B CN 113687817B
Authority
CN
China
Prior art keywords
file
data
message
serialization
msg
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
Application number
CN202110935201.0A
Other languages
English (en)
Other versions
CN113687817A (zh
Inventor
王召东
李朝铭
王建华
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shandong New Generation Information Industry Technology Research Institute Co Ltd
Original Assignee
Shandong New Generation Information Industry Technology Research Institute Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shandong New Generation Information Industry Technology Research Institute Co Ltd filed Critical Shandong New Generation Information Industry Technology Research Institute Co Ltd
Priority to CN202110935201.0A priority Critical patent/CN113687817B/zh
Publication of CN113687817A publication Critical patent/CN113687817A/zh
Application granted granted Critical
Publication of CN113687817B publication Critical patent/CN113687817B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/37Compiler construction; Parser generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明涉及机器人控制领域,具体提供了一种消息格式解析器,所述解析器能够完成msg消息的格式解析,并能够生成支持IROS使用的结构类型以及序列化反序列化的代码,当数据类型中包含用户自定义数据类型时,可以自动包含头文件并支持自定义数据类型的数组。与现有技术相比,本发明具有支持自定义结构的数组类型消息,能够自动包含相关头文件,解析后的格式编译轻便且兼容IROS的优点,进一步的可以帮助IROS开发人员生成规范的数据结构以及相应的序列化反序列化代码,方便用户开发,具有良好的推广价值。

Description

一种消息格式解析器及解析方法
技术领域
本发明涉及机器人控制领域,具体提供一种消息格式解析器及解析方法。
背景技术
在IROS中,用户所传输的数据是定义在一个后缀为msg文本文件中,其中包含了数据的类型、名称以及备注信息等。对于C++用户来讲,需要将该数据文件转化为能够被直接使用的数据结构,如类、结构体等。同时,对IROS来讲,数据的收发过程中存在一个序列化与反序列化的过程。
发送数据前,需要将数据实体序列化为char*类型的数组,数据经过传输到达数据接收端后,需要将数组反序列化为消息实体,至此完成消息的发送接收。因此,针对不同的消息类型,需要产生对应的序列化反序列化代码,才能完成数据传输,比较麻烦。
发明内容
本发明是针对上述现有技术的不足,提供一种设计合理,安全适用的消息格式解析器。
本发明进一步的技术任务是提供一种实用性强的消息格式解析方法。
本发明解决其技术问题所采用的技术方案是:
一种消息格式解析器,所述解析器能够完成msg消息的格式解析,并能够生成支持IROS使用的结构类型以及序列化反序列化的代码,当数据类型中包含用户自定义数据类型时,可以自动包含头文件并支持自定义数据类型的数组。
进一步的,所述解析器的MsgContentReader类作为存储msg信息的类,加载msg文件,并将数据信息加载到内存空间中去。
进一步的,MsgContentReader类向外暴露三个read接口,传入文件地址、文件流对象或按行传入数据,其中,所述按行传入数据适用于无msg文件情况。
进一步的,MsgContentReader完成对msg文件的解析,包括经过去无用字符、去注释后,表示数据类型的定义会被存储到成员变量m_vElements中;
随后,parse接口对数据行进行解析,将数据类型存放于成员变量m_vDataType中,数据名存放于成员变量m_vDataName中,至此消息读入完成。
进一步的,MsgHeaderGenerator类以MsgContentReader的解析结果为基础,通过流的方式,将格式化信息写入输出文件。
进一步的,MsgHeaderGenerator类向外暴露一个generate接口,根据MsgHeaderGenerator中的数据,向传入文件流入命名空间、结构体定义、构造函数定义、友元函数定义和读写接口定义,同时根据消息类型来确定是否要包含以该数据类型为名称的头文件,对于数组类型的数据,采用vector的方式存储,IROS用户可以使用该msg文件用于开发。
进一步的,生成的msg文件中,消息实体类与SerializeBasic为友元函数,实现SerializeBasic的read和write虚函数接口;
针对IROS的序列化反序列化接口,生成message_serialization和message_deserialization函数,实现对当前消息类型的序列化反序列化。
一种消息格式解析方法,MsgContentReader进行文件读取和数据行解析,MsgHeaderGenerator根据MsgContentReader的解析结果执行宏、头文件、友元函数和generateStruct的顺序化操作。
进一步的,所述文件读取会逐行读取文件,对于每一行,在删除首位空格后,以#或者//开头或者空行的视为非数据行,否则视为数据行放入m_vElements;
所述数据行解析时,会遍历m_vElements数组,第一个空格前的字符作为数据类型,第一个空格后的字符经过去空格、去注释后作为数据名。
进一步的,所述generateStruct顺序化操作时,通过遍历成员变量MsgContentReader的m_vDataName和m_vDataType完成对消息类的构造函数列表的初始化,同时完成read和write的这两个虚函数接口的实例化;
完成消息的解析生成之后,用户在自己程序中秩序包含产生的头文件,便可以正常使用消息结构进行消息收发。
本发明的一种消息格式解析器及解析方法和现有技术相比,具有以下突出的有益效果:
本发明具有支持自定义结构的数组类型消息,能够自动包含相关头文件,解析后的格式编译轻便且兼容IROS的优点。
进一步的可以帮助IROS开发人员生成规范的数据结构以及相应的序列化反序列化代码,方便用户开发。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
附图1是一种消息格式解析方法的流程示意图;
附图2是一种消息格式解析器中MsgContentReader类图;
附图3是一种消息格式解析器中MsgHeaderGenerator类图;
附图4是一种消息格式解析器中生成的msg头文件结构示意图。
具体实施方式
为了使本技术领域的人员更好的理解本发明的方案,下面结合具体的实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例都属于本发明保护的范围。
下面给出一个最佳实施例:
如图2-4所示,本实施例中的一种消息格式解析器,能够完成msg消息的格式解析,并能够生成支持IROS使用的结构类型以及序列化反序列化的代码,当数据类型中包含用户自定义数据类型时,可以自动包含头文件并支持自定义数据类型的数组。
解析器的MsgContentReader类作为存储msg信息的类,加载msg文件,并将数据信息加载到内存空间中去。
MsgContentReader类向外暴露三个read接口,传入文件地址、文件流对象或按行传入数据,其中,按行传入数据适用于无msg文件情况。在经过去无用字符、去注释后,表示数据类型的定义会被存储到成员变量m_vElements中;随后parse接口会实现对数据行的解析,将数据类型存放于成员变量m_vDataType中,数据名存放于成员变量m_vDataName中,至此消息读入完成。
MsgHeaderGenerator类以MsgContentReader的解析结果为基础,通过流的方式,将格式化信息写入输出文件。
MsgHeaderGenerator类向外暴露一个generate接口,根据MsgHeaderGenerator中的数据,向传入文件流入命名空间、结构体定义、构造函数定义、友元函数定义和读写接口定义,同时根据消息类型来确定是否要包含以该数据类型为名称的头文件,对于数组类型的数据,采用vector的方式存储,IROS用户可以使用该msg文件用于开发。
在生成的msg文件中,消息实体类与SerializeBasic为友元函数,并实现SerializeBasic的read和write虚函数接口。另外,针对IROS的序列化反序列化接口,生成message_serialization和message_deserialization函数,实现对当前消息类型的序列化反序列化。
一种消息格式解析方法,MsgContentReader进行文件读取和数据行解析,MsgHeaderGenerator根据MsgContentReader的解析结果执行宏、头文件、友元函数和generateStruct的顺序化操作。
其中,文件读取会逐行读取文件,对于每一行,在删除首位空格后,以“#”或者“//”开头或者空行的视为非数据行,否则视为数据行放入m_vElements;
数据行解析时,会遍历m_vElements数组,第一个空格前的字符作为数据类型,第一个空格后的字符经过去空格、去注释后作为数据名。
在MsgHeaderGenerator执行顺序化操作中,最重要的一部分,generateStruct通过遍历成员变量MsgContentReader的m_vDataName和m_vDataType完成对消息类的构造函数列表的初始化,同时完成read和write的这两个虚函数接口的实例化。
完成消息的解析生成之后,用户在自己的程序中秩序包含上述产生的头文件,便可以正常使用消息结构进行消息收发。
上述具体的实施方式仅是本发明具体的个案,本发明的专利保护范围包括但不限于上述具体的实施方式,任何符合本发明的一种消息格式解析器及解析方法权利要求书的且任何所述技术领域普通技术人员对其做出的适当变化或者替换,皆应落入本发明的专利保护范围。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同物限定。

Claims (2)

1.一种消息格式解析器,其特征在于,所述解析器能够完成msg消息的格式解析,并能够生成支持IROS使用的结构类型以及序列化反序列化的代码,当数据类型中包含用户自定义数据类型时,可以自动包含头文件并支持自定义数据类型的数组;
所述解析器的MsgContentReader类作为存储msg信息的类,加载msg文件,并将数据信息加载到内存空间中去;
MsgContentReader类向外暴露三个read接口,传入文件地址、文件流对象或按行传入数据,其中,所述按行传入数据适用于无msg文件情况;
MsgContentReader完成对msg文件的解析,包括经过去无用字符、去注释后,表示数据类型的定义会被存储到成员变量m_vElements中;
随后,parse接口对数据行进行解析,将数据类型存放于成员变量m_vDataType中,数据名存放于成员变量m_vDataName中,至此消息读入完成;
MsgHeaderGenerator类以MsgContentReader的解析结果为基础,通过流的方式,将格式化信息写入输出文件;
MsgHeaderGenerator类向外暴露一个generate接口,根据MsgHeaderGenerator中的数据,向传入文件流入命名空间、结构体定义、构造函数定义、友元函数定义和读写接口定义,同时根据消息类型来确定是否要包含以该数据类型为名称的头文件,对于数组类型的数据,采用vector的方式存储,IROS用户可以使用该msg文件用于开发;
生成的msg文件中,消息实体类与SerializeBasic为友元函数,实现SerializeBasic的read和write虚函数接口;
针对IROS的序列化反序列化接口,生成message_serialization和message_deserialization函数,实现对当前消息类型的序列化反序列化。
2.一种基于权利要求1所述解析器的消息格式解析方法,其特征在于,MsgContentReader进行文件读取和数据行解析,MsgHeaderGenerator根据MsgContentReader的解析结果执行宏、头文件、友元函数和generateStruct的顺序化操作;
所述文件读取会逐行读取文件,对于每一行,在删除首位空格后,以#或者//开头或者空行的视为非数据行,否则视为数据行放入m_vElements;
所述数据行解析时,会遍历m_vElements数组,第一个空格前的字符作为数据类型,第一个空格后的字符经过去空格、去注释后作为数据名;
所述generateStruct顺序化操作时,通过遍历成员变量MsgContentReader的m_vDataName和m_vDataType完成对消息类的构造函数列表的初始化,同时完成read和write的这两个虚函数接口的实例化;
完成消息的解析生成之后,用户在自己程序中只需包含产生的头文件,便可以正常使用消息结构进行消息收发。
CN202110935201.0A 2021-08-16 2021-08-16 一种消息格式解析器及解析方法 Active CN113687817B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110935201.0A CN113687817B (zh) 2021-08-16 2021-08-16 一种消息格式解析器及解析方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110935201.0A CN113687817B (zh) 2021-08-16 2021-08-16 一种消息格式解析器及解析方法

Publications (2)

Publication Number Publication Date
CN113687817A CN113687817A (zh) 2021-11-23
CN113687817B true CN113687817B (zh) 2023-10-31

Family

ID=78579959

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110935201.0A Active CN113687817B (zh) 2021-08-16 2021-08-16 一种消息格式解析器及解析方法

Country Status (1)

Country Link
CN (1) CN113687817B (zh)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9272418B1 (en) * 2014-09-02 2016-03-01 The Johns Hopkins University System and method for flexible human-machine collaboration
CN106452841A (zh) * 2016-09-13 2017-02-22 中国电子科技集团公司第三十二研究所 在机器人操作系统中使用传输服务质量的方法
CN107153212A (zh) * 2016-03-03 2017-09-12 太阳能安吉科技有限公司 用于映射发电设施的方法
CN109159125A (zh) * 2018-09-28 2019-01-08 华东计算技术研究所(中国电子科技集团公司第三十二研究所) 基于ros系统机器人的云服务系统
CN110597500A (zh) * 2019-07-26 2019-12-20 北京柠檬微趣科技股份有限公司 消息结构的序列化和反序列化方法及装置
CN111949249A (zh) * 2019-05-14 2020-11-17 百度(美国)有限责任公司 用于基于Protobuf的项目的通用验证方法
CN112738022A (zh) * 2020-12-07 2021-04-30 浙江工业大学 一种针对机器人操作系统ros消息的攻击方法

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9272418B1 (en) * 2014-09-02 2016-03-01 The Johns Hopkins University System and method for flexible human-machine collaboration
CN107153212A (zh) * 2016-03-03 2017-09-12 太阳能安吉科技有限公司 用于映射发电设施的方法
CN106452841A (zh) * 2016-09-13 2017-02-22 中国电子科技集团公司第三十二研究所 在机器人操作系统中使用传输服务质量的方法
CN109159125A (zh) * 2018-09-28 2019-01-08 华东计算技术研究所(中国电子科技集团公司第三十二研究所) 基于ros系统机器人的云服务系统
CN111949249A (zh) * 2019-05-14 2020-11-17 百度(美国)有限责任公司 用于基于Protobuf的项目的通用验证方法
CN110597500A (zh) * 2019-07-26 2019-12-20 北京柠檬微趣科技股份有限公司 消息结构的序列化和反序列化方法及装置
CN112738022A (zh) * 2020-12-07 2021-04-30 浙江工业大学 一种针对机器人操作系统ros消息的攻击方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
一种类的序列化与反序列化框架;胡晨光;严捷丰;高正东;胡斌;胥锐;;电脑知识与技术(第24期);全文 *

Also Published As

Publication number Publication date
CN113687817A (zh) 2021-11-23

Similar Documents

Publication Publication Date Title
CN111488174B (zh) 应用程序接口文档的生成方法、装置、计算机设备及介质
CN104077335B (zh) 一种结构化数据的序列化、反序列化方法、装置和系统
CN110096338A (zh) 智能合约执行方法、装置、设备及介质
CN102637136A (zh) 融合来自不同编译器阶段的调试信息
CN102103481B (zh) 字节序转换工具
US8776024B2 (en) Software application fine-tuning method, system, and corresponding computer program product
CN111930386B (zh) 一种pattern文件编译方法、装置及电子设备
CN103413569B (zh) 一读且一写静态随机存储器
CN115543290B (zh) 可视化编程方法及系统
CN116627429B (zh) 一种汇编代码生成方法、装置及电子设备和存储介质
CN113687817B (zh) 一种消息格式解析器及解析方法
CN112230873B (zh) 一种基于dsp的显示处理方法
CN101201750A (zh) 利用语法词法分析工具为编解码提供数据的方法
CN115237415A (zh) 一种gis平台下态势复盘的实现方法
CN114169292A (zh) 一种字节流数据转换方法、装置、设备及存储介质
CN108073709A (zh) 一种数据记录的操作方法、装置、设备和存储介质
CN114116475A (zh) 一种基于日志的软件调试方法
CN100562008C (zh) 消息处理系统及其处理方法
CN116800868B (zh) 基于xml的可视化通信协议解析方法及系统
CN112925564B (zh) 一种源代码的冗余导入类清理方法及装置
CN111708572B (zh) 一种基于Clang程序结构的控制流程图自动生成方法
CN116467256A (zh) 一种测井数据hds转换dlis格式转换方法及系统
Kalin Input and Output
America The practical importance of formal semantics
CN108132780B (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