CN113687817B - 一种消息格式解析器及解析方法 - Google Patents
一种消息格式解析器及解析方法 Download PDFInfo
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/37—Compiler construction; Parser generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
- G06F8/427—Parsing
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的这两个虚函数接口的实例化;
完成消息的解析生成之后,用户在自己程序中只需包含产生的头文件,便可以正常使用消息结构进行消息收发。
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) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114564256A (zh) * | 2022-01-19 | 2022-05-31 | 山东新一代信息产业技术研究院有限公司 | 基于iros的消息类工具、系统、方法、装置及介质 |
CN115431262A (zh) * | 2022-07-28 | 2022-12-06 | 山东新一代信息产业技术研究院有限公司 | 一种基于iros的录制和回放消息数据的方法及系统 |
CN115766377B (zh) * | 2022-11-14 | 2025-02-14 | 山东新一代信息产业技术研究院有限公司 | 一种自定义消息的同步方法及设备 |
Citations (7)
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消息的攻击方法 |
-
2021
- 2021-08-16 CN CN202110935201.0A patent/CN113687817B/zh active Active
Patent Citations (7)
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)
Title |
---|
一种类的序列化与反序列化框架;胡晨光;严捷丰;高正东;胡斌;胥锐;;电脑知识与技术(第24期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN113687817A (zh) | 2021-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN113687817B (zh) | 一种消息格式解析器及解析方法 | |
CN111488174B (zh) | 应用程序接口文档的生成方法、装置、计算机设备及介质 | |
CN104657140B (zh) | 代码生成方法及装置 | |
CN104077335B (zh) | 一种结构化数据的序列化、反序列化方法、装置和系统 | |
CN110096338A (zh) | 智能合约执行方法、装置、设备及介质 | |
CN102103481B (zh) | 字节序转换工具 | |
CN103413569B (zh) | 一读且一写静态随机存储器 | |
CN107239264B (zh) | 代码提示信息的生成方法及装置 | |
CN106776779B (zh) | 基于Mac平台的JSON数据生成实体文件的方法 | |
CN114169292A (zh) | 一种字节流数据转换方法、装置、设备及存储介质 | |
CN114371832A (zh) | 基于语义分析的业务代码生成方法、装置和存储介质 | |
CN101201750A (zh) | 利用语法词法分析工具为编解码提供数据的方法 | |
CN113282239A (zh) | 数据迁移方法、存储器及控制器 | |
CN116975087A (zh) | 一种异构数据源的检索方法、装置、设备和介质 | |
Maharaj et al. | On the verification of VDM specification and refinement with PVS | |
CN115237415A (zh) | 一种gis平台下态势复盘的实现方法 | |
CN108073709A (zh) | 一种数据记录的操作方法、装置、设备和存储介质 | |
CN103019801B (zh) | 一种应用于高速数字io波形引擎的编译器 | |
CN116800868B (zh) | 基于xml的可视化通信协议解析方法及系统 | |
CN108132780B (zh) | 一种基于自定义脚本的航空显示控制方法 | |
CN114896145B (zh) | 用于符号执行的复杂类型输入变量懒符号化方法及系统 | |
CN111813413B (zh) | 一种自动生成yaml文件的方法 | |
CN112925564B (zh) | 一种源代码的冗余导入类清理方法及装置 | |
CN116467256A (zh) | 一种测井数据hds转换dlis格式转换方法及系统 | |
CN111752602B (zh) | 一种生成在GO语言中运行的protobuf文件的方法 |
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 |