一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

跨操作系统多源融合算法编译方法、编译器及存储介质

2022-06-16 01:45:12 来源:中国专利 TAG:


1.本发明涉及多源融合导航技术领域,具体而言,涉及一种跨操作系统多源融合算法编译方法、编译器及存储介质。


背景技术:

2.随着定位与导航技术的快速发展,在不存在一种普适的导航定位手段背景下,为了解决地下、水下、室内、城市、高山峡谷、gps服务被干扰、被阻断等各种复杂环境下的导航定位问题,多源融合导航技术获得广泛的研究。
[0003][0004]
多源融合导航基于信息融合技术,充分利用每一个导航源的优势,将来自不同导航源的同构或者异构的导航信息按照相应的融合算法进行融合,获得最佳的融合效果,从而为多复杂环境下的任务部署与执行提供最好的定位与导航服务,具有较强的鲁棒性和可靠性。
[0005]
虽然目前关于多源融合导航技术的研究在国内外都已经取得了巨大成果,但在软件开发过程中仍然存在许多需要亟待解决和完善的难题:
[0006]
1)多源融合导航需要根据任务环境选择合适的导航源,例如卫星导航、惯性导航、光/声学导航、重力/磁力导航以及典型室内定位方法等等,然而这些导航源往往基于不同的平台和编程语言进行开发,例如普通的组合导航大多采用matlab进行开发,智能导航则采用tf keras等环境进行开发等等,目前还没有一个统一的编译平台能同时处理不同导航源的导航信息,因此多源定位导航系统难以对不同导航源的导航信息进行融合。
[0007]
2)在多源定位导航系统中,多源融合算法是充分利用导航源实现融合定位的关键步骤,然而现有多源融合算法往往只能运行在特定的操作系统上,跨操作系统容易出现命令格式不兼容的问题而导致多源融合算法无法正常编译运行,例如windows系统上开发的多源融合算法在linux系统上编译运行报错,而想要在linux系统上运行同一套多源融合算法则需要重新开发,这不仅增大了研发难度和成本,而且不同的开发环境严重降低了多源融合算法的有效性和可移植性。
[0008]
针对上述的问题,目前尚未提出有效的解决方案。


技术实现要素:

[0009]
本发明实施例提供了一种跨操作系统多源融合算法编译方法、编译器及存储介质,以至少解决相关技术中多源融合算法可移植性不高的技术问题。
[0010]
根据本发明实施例的一个方面,提供了一种跨操作系统多源融合算法编译方法,包括:读取导航源文件的文件名,根据所述文件名中的扩展名对所述导航源文件进行预处理;基于预处理的结果,来配置与所述导航源文件对应的软件开发框架,并基于所述软件开发框架来查找并添加所述导航源文件所需的依赖库;通过词法分析、语法分析、语义分析、中间代码生成、目标代码优化和出错处理,对所述导航源文件进行底层处理,将高级语言类
型的所述导航源文件转变为能被机器识别和运行的底层机器代码。
[0011]
根据本发明实施例的另一方面,还提供了一种跨操作系统多源融合算法编译器,包括:导航源文件预处理模块,被配置为读取导航源文件的文件名,根据所述文件名中的扩展名对所述导航源文件进行预处理;软件开发框架配置模块,被配置为基于预处理的结果,来配置与所述导航源文件对应的软件开发框架,并基于所述软件开发框架来查找并添加所述导航源文件所需的依赖库;编译模块,被配置为通过词法分析、语法分析、语义分析、中间代码生成、目标代码优化和出错处理,对所述导航源文件进行底层处理,将高级语言类型的所述导航源文件转变为能被机器识别和运行的底层机器代码。
[0012]
在本发明实施例中,通过文件扩展名一键式识别各导航源平台类型然后配置对应的软件开发框架,再通过集成脚本实现依赖库的一键式查找与添加,最后编译运行并生成兼容各操作系统的可执行文件,从而实现了多源融合算法可移植性高的技术效果,进而解决了相关技术中多源融合算法可移植性不高的技术问题。
附图说明
[0013]
此处所说明的附图用来提供对本发明的进一步理解,构成本技术的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0014]
图1是根据本发明第一实施例的跨操作系统多源融合算法编译器的编译运行方法的流程图;
[0015]
图2是根据本发明第二实施例的跨操作系统多源融合算法编译器的编译运行方法的流程图;
[0016]
图3是根据本发明第三实施例的跨操作系统多源融合算法编译器的编译运行方法的流程图;
[0017]
图3a是根据本发明实施例的预处理步骤s1的分步骤的流程图;
[0018]
图3b是根据本发明实施例的配置相应的软件开发框架步骤s2的分步骤的流程图。
[0019]
图3c是根据本发明实施例的添加依赖库步骤s3的分步骤的流程图;
[0020]
图3d是根据本发明实施例的生成底层机器代步骤s4的分步骤的流程图。
[0021]
图3e是根据本发明实施例的生成可执行文件步骤s5的分步骤的流程图;
[0022]
图4是根据本发明实施的跨操作系统多源融合算法编译器的结构示意图;
[0023]
图5是本发明实施的另一种跨操作系统多源融合算法编译系统的结构示意图。
具体实施方式
[0024]
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0025]
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或
描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0026]
实施例1
[0027]
根据本发明实施例,提供了一种跨操作系统多源融合算法编译方法,如图1所示,该方法包括:
[0028]
步骤s102,读取导航源文件的文件名,根据所述文件名中的扩展名对所述导航源文件进行预处理。
[0029]
步骤s104,基于预处理的结果,来配置与所述导航源文件对应的软件开发框架,并基于所述软件开发框架来查找并添加所述导航源文件所需的依赖库。
[0030]
步骤s106,通过词法分析、语法分析、语义分析、中间代码生成、目标代码优化和出错处理,对所述导航源文件进行底层处理,将高级语言类型的所述导航源文件转变为能被机器识别和运行的底层机器代码。
[0031]
在一个示例性实施例中,在将高级语言类型的所述导航源文件转变为能被机器识别和运行的底层机器代码之后,所述方法还包括:将所述底层机器代码与所述依赖库进行链接,得到完整的底层机器代码并运行所述完整的底层机器代码;将所述完整的底层机器代码的运行结果翻译并生成对应的可执行文件。
[0032]
在一个示例性实施例中,读取导航源文件的文件名,根据所述文件名中的扩展名对所述导航源文件进行预处理,包括:读取所有导入的所述导航源文件的文件名,并将所述文件名转化为字符串格式,其中,所述文件名包括导航工程文件的扩展名和导航源文件的扩展名;基于转化后的所述导航工程文件的扩展名,来确定相应的软件开发框架类型,并基于转化后的所述导航源文件的扩展名,来确定所使用的编程语言类型。
[0033]
在一个示例性实施例中,基于预处理的结果,来配置与所述导航源文件对应的软件开发框架,包括:基于所述软件开发框架类型来确定所述软件开发框架,并基于所述编程语言类型配置所述软件开发框架所需的基本环境。
[0034]
在一个示例性实施例中,基于所述软件开发框架来查找并添加所述导航源文件所需的依赖库,包括:对所述导航源文件进行预编译,处理所有的预编译指令,获得所需的依赖库类型和版本信息;基于所述依赖库类型和版本信息,通过集成脚本一键式自动来查找并添加所述导航源文件所需的依赖库,其中,所述依赖库是所述导航源文件能够在所配置的所述软件开发框架里正常编译运行所必需的底层驱动包或者算法包;将所述导航源文件所需的依赖库一键式添加到已打开的所述软件开发框架中。
[0035]
在一个示例性实施例中,通过词法分析、语法分析、语义分析、中间代码生成、目标代码优化和出错处理,对所述导航源文件进行底层处理,将高级语言类型的所述导航源文件转变为能被机器识别和运行的底层机器代码,包括:根据词法规则识别出所述导航源文件中的各个记号,将所述各个记号转化为符号流,所述各个记号包括以下至少之一:关键字和标识符;根据语法规则识别出所述符号流中的结构,并基于所识别出的结构构造一棵能够正确反映该结构的抽象语法树,所述结构包括以下至少之一:短语和句子;根据语义规则对所述抽象语法树中的语法单元进行静态语义检查,基于检查的结果确定是否存在错误;
如果不存在错误,则根据语义分析来生成中间代码表现形式,并按固定的模式对所述中间代码表现形式进行优化,得到能够被机器识别和运行的所述底层机器代码;如果存在错误,则中止并退出所述导航源文件编译运行,并确定所述导航源文件的编译错误信息。
[0036]
在一个示例性实施例中,根据语法规则识别出所述符号流中的结构包括:基于所述语法规则,将所述符号流分割为多个分区,确定所述符号流的所述多个分区的结构;基于所述多个分区内的预定块的个数的平均值确定所述符号流内的细化符号信息中的各个细化符号值,并使用量化步长来定标所述各个细化符号值,其中,所述量化步长取决于与所述符号流关联的预定空间矢量所采用的参考量化步长;分别将量化步长后的所述各个细化符号值与所述多个分区进行关联,并将所述多个分区中的相邻两个分区的量化步长后的细化符号值的平均值进行线性组合;基于线性组合后的相邻两个分区的细化符号值的平均值来对所述相邻两个分区的结构进行细化。
[0037]
在一个示例性实施例中,基于以下公式进行线性组合:
[0038][0039]
其中,a是线性组合后的相邻两个分区的量化步长后的细化符号值的平均值,a
11
、a
1n
、a
m1
、a
mn
分别是被矩阵转化后的所述多个分区对应的各个数据块,c1、c2和cn分别是所述多个分区中的相邻两个分区的量化步长后的细化符号值的平均值,m是被矩阵转化后的所述多个分区的对应的矩阵的列数,n是被矩阵转化后的所述多个分区的对应的矩阵的行数。
[0040]
本实施例提供的跨操作系统多源融合算法编译方法,能够同时处理基于不同平台和编程语言开发的导航源的导航信息,并很好地兼容android、 linux、windows和鸿蒙系统,支持大规模场景下的应用和部署,实现手持终端、车载终端和仿真机终端的一体化运行;设计了一种跨操作系统多源融合算法编译器的编译运行方法,通过文件扩展名一键式识别各导航源平台类型然后配置对应的软件开发框架,然后通过集成脚本实现依赖库的一键式查找与添加,最后编译运行并生成兼容各操作系统的可执行文件;本发明支持跨平台和跨操作系统运行,优化了多源融合导航算法的开发环境和开发流程,降低研发难度和成本,大大提高了多源融合算法的有效性和可移植性,具有显著的优势和广阔的应用前景。
[0041]
实施例2
[0042]
根据本发明实施例,提供了一种跨操作系统多源融合算法编译方法,如图2所示,该方法包括:
[0043]
步骤s202,对导航源文件进行预处理。
[0044]
首先读入所有导航源文件的文件名,然后根据这些文件的扩展名对所有导入的导航源文件进行两步预处理:一是通过导航工程文件的扩展名

.xx

来判断对应的软件开发框架类型;二是根据导航源程序文件的扩展名

.xx

来识别所使用的编程语言类型;最后将预处理的结果传给软件开发框架配置模块。
[0045]
例如,导航源文件导航源文件预处理模块首先读取所有导入的导航源文件的文件
名,并将其转化为字符串格式。根据导航工程文件的扩展名

.xx

,判断其所使用的软件开发框架类型。若文件扩展名正确,根据导航源程序文件的扩展名

.xx

来识别所使用的编程语言类型,导航源文件识别模块将导航源文件的预处理结果传给软件开发框架配置模块;若文件扩展名不正确,所导入的导航源文件类型不正确而无法被识别,编译器停止运行并退出。
[0046]
步骤s204,配置软件开发框架。
[0047]
根据预处理结果来自动配置相应的软件开发框架,软件开发框架是一种特殊的软件组件规范,用户可以按照这个规范制作或导入任何自己所需的源文件,从而方便了用户对多源融合导航算法进行开发,例如matlab 软件开发框架可以导入文件扩展名为

.m、.mat

的导航源文件,qt软件开发框架可以导入文件扩展名为

.pro、.ui、.h、.cpp

的导航源文件并使用c 编程语言进行开发,tensorflow软件开发框架可以导入文件扩展名为

.pb、.py

的导航源文件并使用python编程语言进行开发,pycharm 软件开发框架可以导入文件扩展名为

.py

的导航源文件并使用python 编程语言进行开发。
[0048]
例如,根据导航源文件识别模块的预处理结果,软件开发框架配置模块首先查询本机是否已安装相关软件开发框架,若已安装,则启动导航源文件所使用的软件开发框架,然后根据导航源程序文件所使用的编程语言类型配置好基本环境,并自动查询并下载相关的软件开发框架,然后装配本机;否则,删除本机现装的软件开发框架,重新查询并下载相关的软件开发框架,然后装配本机。
[0049]
步骤s206,添加依赖库。
[0050]
通过集成脚本一键式地自动查找并添加导航源程序必需的依赖库,依赖库是导航源程序能够在所配置的软件开发框架里正常编译运行所必需的一些底层驱动包或者算法包,例如c语言类型的导航源程序在编译运行时需要调用的

stdio.h

等标准库文件,智能导航算法开发所需要调用的

keras

深度学习库,matlab开发所需的各种算法工具包等。
[0051]
例如,依赖库查找与添加模块首先对导航源程序进行预编译,处理所有的预编译指令,获得所需的依赖库类型和版本信息。通过软件预置包含完整依赖库信息的集成脚本一键式查询本机是否存储相关的依赖库,若本机已下载安装相关依赖库,则将导航源程序所需的依赖库一键式添加到打开的软件开发框架中;否则,自动查询和下载所需的依赖库包,并将新下载的依赖库包的相关信息添加到集成脚本中。
[0052]
步骤s208,进行底层代码转变。
[0053]
编译模块通过词法分析器、语法分析器、语义分析器、中间代码生成器、目标代码优化器和出错处理器模块对导航源程序逐一进行底层处理,最终将c、c 、python等高级语言类型的导航源程序转变为可被机器识别和运行的底层机器代码。
[0054]
例如,词法分析器根据词法规则识别出导航源程序中的各个记号,例如关键字、标识符等,然后将这些记号转化为符号流。语法分析器根据语法规则识别出符号流中的结构(短语、句子),并构造一棵能够正确反映该结构的抽象语法树。语义分析器根据语义规则对抽象语法树中的语法单员进行静态语义检查,如果存在类型错误等,则出错处理器自动检查和识别程序编译过程中出现的错误,导航源程序编译运行中止并退出,向用户打印程序编译错误信息和日志;否则,中间代码生成器根据语义分析器的输出生成中间代码表现形式,中间代码优化器按固定的模式对中间代码表现形式进行优化,得到可以被机器识别和
运行的目标机器语言,如二进制代码等。
[0055]
步骤s210,生成可执行文件。
[0056]
生成可执行文件模块将导航源程序的底层机器代码与导入的依赖库进行链接,得到完整的底层机器代码然后运行,将运行结果翻译并生成对应的可执行文件。
[0057]
例如,生成可执行文件模块将编译模块得到的导航源程序的底层机器代码与所添加的系统库和依赖库文件链接起来,得到完整且可执行的底层机器代码。系统运行所获得的完整底层机器代码并为其分配对应的地址和空间。根据用户当前所使用操作系统类型,将多源融合导航源程序底层机器代码运行的结果转译成与当前操作系统兼容的可执行文件格式,例如,如果是android操作系统,则生成

.app

类型文件;如果是linux操作系统,则生成二进制类型可执行文件;如果是windows操作系统,则生成

.exe、.dll

等类型文件;如果是鸿蒙操作系统,则生成

.app、.hap

等类型文件;若可执行文件生成成功,则将生成的可执行文件保存到用户设置的目标文件夹下,然后编译器运行结束并退出;否则,可执行文件生成失败,编译器运行中止并退出,向用户打印程序编译运行错误信息和日志。
[0058]
本实施例提供的方法能够在复杂的任务环境中同时处理基于不同平台和编程语言开发的导航源的导航信息,并很好地兼容android、linux、 windows和鸿蒙系统,支持大规模场景下的应用和部署,实现手持终端、车载终端和仿真机终端的一体化运行,优化了软件开发环境和开发流程,降低研发难度和成本,大大提高了多源融合算法的有效性和可移植性,具有显著的优势和广阔的应用前景。
[0059]
实施例3
[0060]
根据本发明实施例,提供了一种跨操作系统多源融合算法编译器的编译运行方法,如图3所示,该方法包括以下步骤:
[0061]
步骤s1,预处理。
[0062]
导航源文件导航源文件预处理模块首先读入所有导航源文件的文件名,然后根据这些文件的扩展名对所有导入的导航源文件进行两步预处理:一是通过导航工程文件的扩展名

.xx

来判断对应的软件开发框架类型;二是根据导航源文件文件的扩展名

.xx

来识别所使用的编程语言类型;最后将预处理的结果传给软件开发框架配置模块。
[0063]
在一个示例性实施例中,步骤s1如图3a所示,可以包括以下分步骤:
[0064]
步骤s11:导航源文件导航源文件预处理模块首先读取所有导入的导航源文件的文件名,并将其转化为字符串格式,然后执行s12;
[0065]
步骤s12:判断文件扩展名是否正确?
[0066]
若文件扩展名正确则执行s13,否则执行s16。
[0067]
步骤s13,判断软件开发框架类型。
[0068]
根据导航工程文件的扩展名

.xx

判断其所使用的软件开发框架类型。
[0069]
步骤s14:根据导航源文件文件的扩展名

.xx

来识别所使用的编程语言类型。
[0070]
步骤s15:导航源文件识别模块将导航源文件的预处理结果传给软件开发框架配置模块,然后执行s2;
[0071]
步骤s16:所导入的导航源文件类型不正确而无法被识别,编译器停止运行并退出。
[0072]
步骤s2,配置相应的软件开发框架。
[0073]
软件开发框架配置模块根据导航源文件识别模块的预处理结果来自动配置相应的软件开发框架,软件开发框架是一种特殊的软件组件规范,用户可以按照这个规范制作或导入任何自己所需的源文件,从而方便了用户对多源融合导航算法进行开发,例如matlab软件开发框架可以导入文件扩展名为

.m、.mat

的导航源文件,qt软件开发框架可以导入文件扩展名为

.pro、.ui、.h、.cpp

的导航源文件并使用c 编程语言进行开发,tensorflow软件开发框架可以导入文件扩展名为

.pb、.py

的导航源文件并使用python编程语言进行开发,pycharm软件开发框架可以导入文件扩展名为

.py

的导航源文件并使用python编程语言进行开发。
[0074]
在一个示例性实施例中,步骤s2如图3b所示,可以包括以下分步骤:
[0075]
步骤s21:根据导航源文件识别模块的预处理结果,软件开发框架配置模块首先查询本机是否已安装相关软件开发框架,若已安装,则执行 s22,否则执行s23;
[0076]
步骤s22:启动导航源文件所使用的软件开发框架,然后根据导航源文件文件所使用的编程语言类型配置好基本环境,若配置成功,则执行 s3,否则执行s24;
[0077]
步骤s23:自动查询并下载相关的软件开发框架,然后装配本机,执行s21;
[0078]
步骤s24:删除本机现装的软件开发框架,重新查询并下载相关的软件开发框架,然后装配本机,执行s21。
[0079]
步骤s3,添加依赖库
[0080]
依赖库查找与添加模块通过集成脚本一键式地自动查找并添加导航源文件必需的依赖库,依赖库是导航源文件能够在所配置的软件开发框架里正常编译运行所必需的一些底层驱动包或者算法包,例如c语言类型的导航源文件在编译运行时需要调用的

stdio.h

等标准库文件,智能导航算法开发所需要调用的

keras

深度学习库,matlab开发所需的各种算法工具包等等。
[0081]
在一个示例性实施例中,步骤s3可以包括以下分步骤:
[0082]
步骤s31:依赖库查找与添加模块首先对导航源文件进行预编译,处理所有的预编译指令,获得所需的依赖库类型和版本信息,然后执行s32;
[0083]
步骤s32:通过软件预置包含完整依赖库信息的集成脚本一键式查询本机是否存储相关的依赖库,若本机已下载安装相关依赖库,则执行s33,否则执行s34;
[0084]
步骤s33:将导航源文件所需的依赖库一键式添加到打开的软件开发框架中,然后执行s4;
[0085]
步骤s34:自动查询和下载所需的依赖库包,并将新下载的依赖库包的相关信息添加到集成脚本中,然后执行s33。
[0086]
步骤s4,生成底层机器代码。
[0087]
编译模块通过词法分析器、语法分析器、语义分析器、中间代码生成器、目标代码优化器和出错处理器模块对导航源文件逐一进行底层处理,最终将c、c 、python等高级语言类型的导航源文件转变为可被机器识别和运行的底层机器代码。
[0088]
在一个示例性实施例中,步骤s4如图3d所示,可以包括以下分步骤:
[0089]
步骤s41:词法分析器根据词法规则识别出导航源文件中的各个记号,例如关键字、标识符等,然后将这些记号转化为符号流,执行s42;
[0090]
步骤s42:语法分析器根据语法规则识别出符号流中的结构(短语、句子),并构造
一棵能够正确反映该结构的抽象语法树,执行s43;
[0091]
步骤s43:语义分析器根据语义规则对抽象语法树中的语法单员进行静态语义检查,如果存在类型错误等,则执行s46,否则执行s44;
[0092]
步骤s44:中间代码生成器根据语义分析器的输出生成中间代码表现形式,然后执行s45;
[0093]
步骤s45:中间代码优化器按固定的模式对中间代码表现形式进行优化,得到可以被机器识别和运行的目标机器语言,如二进制代码等,然后执行s5;
[0094]
步骤s46:出错处理器自动检查和识别程序编译过程中出现的错误,则导航源文件编译运行中止并退出,向用户打印程序编译错误信息和日志。
[0095]
在一个示例性实施例中,步骤s42还可以包括:根据语法规则识别出所述符号流中的结构包括:基于所述语法规则,将所述符号流分割为多个分区,确定所述符号流的所述多个分区的结构;基于所述多个分区内的预定块的个数的平均值确定所述符号流内的细化符号信息中的各个细化符号值,并使用量化步长来定标所述各个细化符号值,其中,所述量化步长取决于与所述符号流关联的预定空间矢量所采用的参考量化步长;分别将量化步长后的所述各个细化符号值与所述多个分区进行关联,并将所述多个分区中的相邻两个分区的量化步长后的细化符号值的平均值进行线性组合;基于线性组合后的相邻两个分区的细化符号值的平均值来对所述相邻两个分区的结构进行细化。
[0096]
在一个示例性实施例中,可以基于以下公式进行线性组合:
[0097][0098]
其中,a是线性组合后的相邻两个分区的量化步长后的细化符号值的平均值,a
11
、a
1n
、a
m1
、a
mn
分别是被矩阵转化后的所述多个分区对应的各个数据块,c1、c2和cn分别是所述多个分区中的相邻两个分区的量化步长后的细化符号值的平均值,m是被矩阵转化后的所述多个分区的对应的矩阵的列数,n是被矩阵转化后的所述多个分区的对应的矩阵的行数。
[0099]
步骤s5:生成可执行文件。
[0100]
生成可执行文件模块将导航源文件的底层机器代码与导入的依赖库进行链接,得到完整的底层机器代码然后运行,将运行结果翻译并生成对应的可执行文件。
[0101]
在一个示例性实施例中,步骤s5如图3e所示,可以可以包括以下分步骤:
[0102]
步骤s51:生成可执行文件模块将编译模块得到的导航源文件的底层机器代码与所添加的系统库和依赖库文件链接起来,得到完整且可执行的底层机器代码,然后执行s52;
[0103]
步骤s52:系统运行所获得的完整底层机器代码并为其分配对应的地址和空间,然后执行s53;
[0104]
步骤s53:根据用户当前所使用操作系统类型,将多源融合导航源文件底层机器代码运行的结果转译成与当前操作系统兼容的可执行文件格式,例如,如果是android操作系
统,则生成

.app

类型文件;如果是linux操作系统,则生成二进制类型可执行文件;如果是windows操作系统,则生成

.exe、.dll

等类型文件;如果是鸿蒙操作系统,则生成

.app、.hap

等类型文件;若可执行文件生成成功,则执行s54,否则执行s55;
[0105]
步骤s54:将生成的可执行文件保存到用户设置的目标文件夹下,然后编译器运行结束并退出;
[0106]
步骤s55:可执行文件生成失败,编译器运行中止并退出,向用户打印程序编译运行错误信息和日志。
[0107]
通过本实施例,能够实现以下有益效果:
[0108]
能够同时处理基于不同平台和编程语言开发的导航源的导航信息,并很好地兼容android、linux、windows和鸿蒙系统,支持大规模场景下的应用和部署,实现手持终端、车载终端和仿真机终端的一体化运行。
[0109]
此外,通过文件扩展名一键式识别各导航源平台类型然后配置对应的编译环境,然后通过集成脚本实现依赖库的一键式查找与添加,最后编译运行并生成兼容各操作系统的可执行文件,实现多源融合算法的跨操作系统编译运行。
[0110]
此外,本实施例支持跨平台和跨操作系统运行,优化了多源融合导航软件的开发环境和开发流程,降低研发难度和成本,大大提高了多源融合算法的有效性和可移植性,具有显著的优势和广阔的应用前景。
[0111]
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
[0112]
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如 rom/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
[0113]
实施例4
[0114]
根据本发明实施例,还提供了一种跨操作系统多源融合算法编译器,如图4所示,该编译器包括导航源文件预处理模块、软件开发框架配置模块、依赖库查找与添加模块以及编译模块。
[0115]
导航源文件预处理模块42,被配置为读取导航源文件的文件名,根据所述文件名中的扩展名对所述导航源文件进行预处理;
[0116]
软件开发框架配置模块44,被配置为基于预处理的结果,来配置与所述导航源文件对应的软件开发框架;
[0117]
依赖库查找与添加模块46,被配置为基于所述软件开发框架来查找并添加所述导航源文件所需的依赖库;
[0118]
编译模块48,被配置为通过词法分析、语法分析、语义分析、中间代码生成、目标代
码优化和出错处理,对所述导航源文件进行底层处理,将高级语言类型的所述导航源文件转变为能被机器识别和运行的底层机器代码。
[0119]
在一个示例性实施例中,编译器还可以包括可执行文件生成模块,被配置为:将所述底层机器代码与所述依赖库进行链接,得到完整的底层机器代码并运行所述完整的底层机器代码;将所述完整的底层机器代码的运行结果翻译并生成对应的可执行文件。
[0120]
在一个示例性实施例中,导航源文件预处理模块42还被配置为:读取所有导入的所述导航源文件的文件名,并将所述文件名转化为字符串格式,其中,所述文件名包括导航工程文件的扩展名和导航源文件的扩展名;基于转化后的所述导航工程文件的扩展名,来确定相应的软件开发框架类型,并基于转化后的所述导航源文件的扩展名,来确定所使用的编程语言类型。
[0121]
在一个示例性实施例中,软件开发框架配置模块44还被配置为:基于所述软件开发框架类型来确定所述软件开发框架,并基于所述编程语言类型配置所述软件开发框架所需的基本环境。
[0122]
在一个示例性实施例中,依赖库查找与添加模块46还被配置为:对所述导航源文件进行预编译,处理所有的预编译指令,获得所需的依赖库类型和版本信息;基于所述依赖库类型和版本信息,通过集成脚本一键式自动来查找并添加所述导航源文件所需的依赖库,其中,所述依赖库是所述导航源文件能够在所配置的所述软件开发框架里正常编译运行所必需的底层驱动包或者算法包;将所述导航源文件所需的依赖库一键式添加到已打开的所述软件开发框架中。
[0123]
在一个示例性实施例中,编译模块48还被配置为:根据词法规则识别出所述导航源文件中的各个记号,将所述各个记号转化为符号流,所述各个记号包括以下至少之一:关键字和标识符;根据语法规则识别出所述符号流中的结构,并基于所识别出的结构构造一棵能够正确反映该结构的抽象语法树,所述结构包括以下至少之一:短语和句子;根据语义规则对所述抽象语法树中的语法单元进行静态语义检查,基于检查的结果确定是否存在错误;如果不存在错误,则根据语义分析来生成中间代码表现形式,并按固定的模式对所述中间代码表现形式进行优化,得到能够被机器识别和运行的所述底层机器代码;如果存在错误,则中止并退出所述导航源文件编译运行,并确定所述导航源文件的编译错误信息。
[0124]
在一个示例性实施例中,编译模块48还被配置为:基于所述语法规则,将所述符号流分割为多个分区,确定所述符号流的所述多个分区的结构;基于所述多个分区内的预定块的个数的平均值确定所述符号流内的细化符号信息中的各个细化符号值,并使用量化步长来定标所述各个细化符号值,其中,所述量化步长取决于与所述符号流关联的预定空间矢量所采用的参考量化步长;分别将量化步长后的所述各个细化符号值与所述多个分区进行关联,并将所述多个分区中的相邻两个分区的量化步长后的细化符号值的平均值进行线性组合;基于线性组合后的相邻两个分区的细化符号值的平均值来对所述相邻两个分区的结构进行细化。
[0125]
在一个示例性实施例中,编译模块48可以基于以下公式进行线性组合:
[0126][0127]
其中,a是线性组合后的相邻两个分区的量化步长后的细化符号值的平均值,a
11
、a
1n
、a
m1
、a
mn
分别是被矩阵转化后的所述多个分区对应的各个数据块,c1、c2和cn分别是所述多个分区中的相邻两个分区的量化步长后的细化符号值的平均值,m是被矩阵转化后的所述多个分区的对应的矩阵的列数,n是被矩阵转化后的所述多个分区的对应的矩阵的行数。
[0128]
本实施例提供的跨操作系统多源融合算法编译器,导航源文件预处理模块42读取导入的导航源文件并进行预处理,软件开发框架配置模块44 自动配置导航源文件所需的软件开发框架,依赖库查找与添加模块46自动查找并添加导航源程序必需的依赖库,编译模块48对导航源程序进行底层处理,得到可被机器识别和运行的底层机器代码,生成可执行文件模块将底层机器代码翻译并生成对应的可执行文件。通过这样的结构,能够同时处理基于不同平台和编程语言开发的导航源的导航信息,并很好地兼容android、linux、windows和鸿蒙系统,支持大规模场景下的应用和部署,实现手持终端、车载终端和仿真机终端的一体化运行,具有显著的优势和广阔的应用前景。
[0129]
实施例5
[0130]
根据本发明实施例,还提供了一种跨操作系统多源融合算法编译系统,涉及多源融合导航技术领域,具体是一种与android、linux、windows和鸿蒙兼容的跨操作系统多源融合算法编译系统。如图5所示,该编译系统包括导航源52和跨操作系统多源融合算法编译器54。其中,跨操作系统多源融合算法编译器54可以是实施例4中的结构,也可以是如下的结构。
[0131]
跨操作系统多源融合算法编译器54包括导航源文件预处理模块42、软件开发框架配置模块44、依赖库查找与添加模块46、编译模块48和生成可执行文件模块49。
[0132]
其中,软件开发框架配置模块44由qt、matlab、pycharm和tensorflow 四种框架组成,为导航源文件配置对应的软件开发框架;编译模块48由词法分析器、语法分析器、语义分析器、中间代码生成器、目标代码优化器和出错处理器组成,对导航源程序进行底层处理;生成可执行文件模块由android系统可执行文件生成、linux系统可执行文件生成、windows 系统可执行文件生成和鸿蒙系统可执行文件生成模块组成,生成与各操作系统兼容的多源融合算法可执行文件。
[0133]
导航源文件预处理模块42能够取导入的导航工程文件和源程序文件的扩展名来识别其所使用的软件开发框架类型以及相应的编程语言类型。
[0134]
软件开发框架配置模块44能够自动配置导航源文件开发所依托的软件开发框架。
[0135]
依赖库查找与添加模块46能够通过集成脚本一键式地自动查找并添加导航源程序必需的依赖库。
[0136]
编译模块48对导航源程序进行底层处理,得到可被机器识别和运行的底层机器代码。
[0137]
生成可执行文件模块按照与当前操作系统兼容的指令格式,将导航源程序的底层机器代码翻译并生成对应的可执行文件,实现多源融合导航算法编译器的多平台跨操作系统运行。
[0138]
本实施例提供的跨操作系统多源融合算法编译器,能够同时处理基于不同平台和编程语言开发的导航源的导航信息,并很好地兼容android、 linux、windows和鸿蒙系统,支持大规模场景下的应用和部署,实现手持终端、车载终端和仿真机终端的一体化运行。并且,能够通过文件扩展名一键式识别各导航源平台类型然后配置对应的编译环境,然后通过集成脚本实现依赖库的一键式查找与添加,最后编译运行并生成兼容各操作系统的可执行文件,实现多源融合算法的跨操作系统编译运行。
[0139]
此外,本实施例提供的编译器能够支持跨平台和跨操作系统运行,优化了多源融合导航软件的开发环境和开发流程,降低研发难度和成本,大大提高了多源融合算法的有效性和可移植性,具有显著的优势和广阔的应用前景。
[0140]
实施例6
[0141]
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质存储有程序,在该程序运行时,可以实现实施例1至3中的方法,此处不在赘述。
[0142]
可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,randomaccess memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0143]
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0144]
上述实施例中的集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在上述计算机可读取的存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在存储介质中,包括若干指令用以使得一台或多台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
[0145]
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0146]
在本技术所提供的几个实施例中,应该理解到,所揭露的客户端,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
[0147]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
[0148]
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单
元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0149]
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献