CN113703779B - 一种跨平台的多语言编译方法和超轻量物联网虚拟机 - Google Patents

一种跨平台的多语言编译方法和超轻量物联网虚拟机 Download PDF

Info

Publication number
CN113703779B
CN113703779B CN202111038252.XA CN202111038252A CN113703779B CN 113703779 B CN113703779 B CN 113703779B CN 202111038252 A CN202111038252 A CN 202111038252A CN 113703779 B CN113703779 B CN 113703779B
Authority
CN
China
Prior art keywords
language
code
grammar
preset format
intermediate code
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
CN202111038252.XA
Other languages
English (en)
Other versions
CN113703779A (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.)
Wang Zhe
Original Assignee
Individual
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 Individual filed Critical Individual
Priority to CN202111038252.XA priority Critical patent/CN113703779B/zh
Publication of CN113703779A publication Critical patent/CN113703779A/zh
Application granted granted Critical
Publication of CN113703779B publication Critical patent/CN113703779B/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/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G16INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR SPECIFIC APPLICATION FIELDS
    • G16YINFORMATION AND COMMUNICATION TECHNOLOGY SPECIALLY ADAPTED FOR THE INTERNET OF THINGS [IoT]
    • G16Y30/00IoT infrastructure
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本发明涉及一种跨平台的多语言编译方法和超轻量物联网虚拟机,方法包括以下步骤:通过通用语法前端解析器将高级编程语言形成的源代码转化成预设格式的中间码;通过编译器将所述中间码编译成预设格式的字节码;判断是否是跨语言加载,并结合目标加载时间加载所述预设格式的中间码或所述预设格式的字节码并执行,输出执行结果。本发明利用超轻量物联网虚拟机执行一套标准、可扩展的字节码格式,不仅可以满足不同编程语言的语法特性,进行多语言混合开发,而且通过将不同语言翻译成更为抽象的中间码,减小了编译体积和占用内存,方便在小型化物联网终端上使用。

Description

一种跨平台的多语言编译方法和超轻量物联网虚拟机
技术领域
本发明涉及软件开发领域,尤其涉及一种跨平台的多语言编译方法和超轻量物联网虚拟机。
背景技术
物联网是把所有物品通过信息传感设备与互联网连接起来,进行信息交换,即物物相息,以实现智能化识别和管理。近几年物联网发展越来越快,各种物联网设备也在我们日常生活中越来越常见,比如智能家居、智能穿戴设备等等。目前使用在物联网领域的常用软件开发语言包括Python语言、JavaScript语言、Lua语言、HTML语言、CSS语言和QML语言等等,很多情况下,一个软件开发平台需要同时采用上述多种语言,因此需要具备多语言混合开发的能力。同时,随着物联网设备的小型化发展趋势,智能仪表、智能小家电等较多运用单片机+无线模块方式连接物联网平台,因此对单片机上软件开发平台的软件编译体积以及内存占用的要求也越来越高,目前的常用软件开发方法和平台难以直接用于小型化的物联网设备上。
发明内容
本发明提供了一种跨平台的多语言编译方法和超轻量物联网虚拟机,解决了以上所述的技术问题。
本发明解决上述技术问题的技术方案如下:一种跨平台的多语言编译方法,包括以下步骤:
步骤1,通过通用语法前端解析器将高级编程语言形成的源代码转化成预设格式的中间码;
步骤2,通过编译器将所述中间码编译成预设格式的字节码;
步骤3,判断是否是跨语言加载,并结合目标加载时间加载所述预设格式的中间码或预设格式的字节码并执行,输出执行结果。
进一步的,所述高级编程语言包括Python语言、JavaScript语言、Lua语言、HTML语言、CSS语言和QML语言。
进一步的,对预设格式的中间码或预设格式的字节码进行加载执行时,判断执行流程中是否存在对应的劫持接口,若存在,则执行所述劫持接口定义的预设劫持流程,并输出执行结果,若不存在,则执行默认流程;
所述劫持接口包括对象创建操作劫持接口、对象销毁操作劫持接口、成员变量操作劫持接口、函数调用操作劫持接口、数组操作劫持接口、迭代操作劫持接口和字节码操作劫持接口中的一个或者多个。
进一步的,所述通过通用语法前端解析器将高级编程语言形成的源代码转化成预设格式的中间码具体包括:
S101,获取与所述高级编程语言对应的grammar文件;
S102,通过通用语法前端解析器读取任一所述grammar文件,对所述grammar文件进行处理生成对应的语法前端模板,所述语法前端模板为C语言模板且包括所述grammar文件的数据结构;
S103,通过所述通用语法前端解析器加载对应的语法前端模板,以对所述高级编程语言形成的源代码进行词法分析、语法分析和语义分析,形成预设格式的中间码。
进一步的,所述通过编译器将中间码编译成预设格式的字节码具体为:
S201,获取所述高级编程语言对应的语法前端模板;
S202,在所述语法前端模板的语法结构树节点中插入所述预设格式的中间码,生成插入结果;
S203,采用编译器对插入结果进行编码生成预设格式的字节码。
进一步的,对预设格式的中间码或预设格式的字节码进行加载执行,具体为:通过文件系统对预设格式的中间码或预设格式的字节码进行加载执行;
或者将预设格式的中间码或预设格式的字节码烧写至单片机的flash地址或者ram内存地址后,从所述flash地址或者ram内存地址中加载所述中间码或者所述字节码。
进一步的,对所述中间码或者所述字节码进行加载执行时,判断是否是跨语言加载,若是,则使用中间码进行加载,若否,则获取目标加载时间,若目标加载时间小于第一预设值,则加载执行对应的字节码,若目标加载时间大于或者等于第一预设值,则加载执行对应的中间码。
进一步的,还包括垃圾回收步骤,具体为:当创建对象、语法解析和/或运行回调函数出现内存不足时,采用预设标记清扫算法进行第一次垃圾回收,并根据第一次垃圾回收后的当前内存占用状态判断是否采用预设标记清扫算法和/或预设标记压缩算法再次进行垃圾回收。
本发明实施例的第二方面提供了一种超轻量物联网虚拟机,包括通用语法前端解析器、编译器和执行器,
所述通用语法前端解析器用于将高级编程语言形成的源代码转化成预设格式的中间码;
所述编译器用于将所述中间码编译成预设格式的字节码;
所述执行器用于判断是否是跨语言加载,并结合目标加载时间加载所述预设格式的中间码或预设格式的字节码并执行,输出执行结果。
进一步的,所述超轻量物联网虚拟机还包括垃圾回收模块,所述垃圾回收模块用于当出现内存不足时,采用预设标记清扫算法进行第一次垃圾回收,并根据第一次垃圾回收后的当前内存占用状态判断是否采用预设标记清扫算法和/或预设标记压缩算法再次进行垃圾回收。
本发明实施例提供了一种跨平台的多语言编译方法和超轻量物联网虚拟机,该超轻量物联网虚拟机拥有一种通用语法前端构架,执行一套标准、可扩展的字节码格式,可以满足不同编程语言的语法特性,从而能够快速的将不同语言翻译成同一种中间码,中间码又可以通过编译器即时翻译成虚拟机的字节码格式,而中间码表达内容更为抽象,占用体积相比较字节码更小,从而能够减小在支持多种语言时生成的固件体积。
为使发明的上述目的、特征和优点能更明显易懂,下文特举本发明较佳实施例,并配合所附附图,作详细说明如下。
附图说明
图1为一种跨平台的多语言编译方法的流程示意图;
图2为一种超轻量物联网虚拟机的结构示意图。
具体实施方式
以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、接口、技术之类的具体细节,以便透切理解本发明。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本发明。在其它情况中,省略对众所周知的系统、电路以及方法的详细说明,以免不必要的细节妨碍本发明的描述。
本发明主要基于超轻量物联网虚拟机进行多语言、跨平台地编译、运行各种执行文件。本发明的超轻量物联网虚拟机是一款通用、精简的虚拟机,其主要由通用语法前端解析器、编译器和执行器构成,可运行在资源受限制的单片机上,从而打破物联网和互联网人才边界,赋能物联网企业和开发者全新的开发模式,降低物联网开发门槛,极速提升开发效率。
图1为实施例1提供的一种跨平台的多语言编译方法的流程示意图,如图1所示,包括以下步骤:
S1,通过通用语法前端解析器将高级编程语言形成的源代码转化成预设格式的中间码,所述高级编程语言包括Python语言、JavaScript语言、Lua语言、HTML语言、CSS语言和QML语言等等,从而支持多语言混合开发。
一个优选实施例中,上述步骤具体为:
S101,获取与所述高级编程语言对应的grammar文件。grammar文件是一种描述编程语言语法规则的文件,包括词法规则和语法规则。目前常见的有yacc、antlr等支持的规则文件。本实施例中超轻量物联网虚拟机采用antlr和/或yacc规则文件的编写方法预先针对Python语言、JavaScript语言、Lua语言、HTML语言、CSS语言和QML语言分别开发并存储了对应的grammar文件。当然其他优选实施例中,所述超轻量物联网虚拟机还提供了grammar文件编写工具,方便程序人员根据语言执行流程自行编写grammar文件。
S102,通过通用语法前端解析器读取任一所述grammar文件,对所述grammar文件进行处理生成对应的语法前端模板,所述语法前端模板为C语言模板且包括所述grammar文件的数据结构。
然后执行S103,通过所述通用语法前端解析器加载对应的语法前端模板,以对所述高级编程语言形成的源代码进行词法分析、语法分析和语义分析,形成预设格式的中间码。
本实施例超轻量物联网虚拟机的中间码有别于传统的中间码,与超轻量物联网虚拟机运行的字节码也不同,超轻量物联网虚拟机不能直接运行中间码,需要通过编译器对中间码进行解析,并生成字节码,而字节码是超轻量物联网虚拟机可以直接加载运行的编码。具体来说,这里的中间码是一种抽象的编码格式,并不用于描述虚拟机如何工作,而是用于描述如何针对不同语言生成对应字节码,相当于本方案有两套字节码格式,第一套字节码作为中间码,用于针对不同语言定义生成相应字节码的方法。
上述实施例将grammar文件转换成了一种数据结构,这种数据结构占用芯片资源小、避免了针对每种编程语言都需要通过grammar文件来编写一套语法前端解析器,而是一套通用语法前端解析器通过加载不同数据结构来实现不同语法解析,大大降低了芯片资源使用。
一个实施例中,所述中间码的格式为token+oprand1+oprand2+……+oprandi,i≥1,token为用于描述语法树节点类型的单字节数据,oprandi为token后面衔接的操作数,用于表示节点类型的具体操作内容,oprandi可以是token、单字节、整数或者小数或者字符串,其具体类型和个数由token决定。
一个实施例中,所述中间码的文件格式为:<EVM 标识符> + <数字常量池> + <字符串常量池> + <中间码内容(很多个中间码)> 。
然后执行S2,通过编译器将所述中间码编译成预设格式的字节码。中间码是一种具有抽象含义的编码格式,可以通过编译器进行编译,并生成字节码。本实施例中,超轻量物联网虚拟机的编译器是为中间码设计的,只能将目标格式的中间码翻译成对应的字节码。而字节码描述的是超轻量物联网虚拟机的运行逻辑,其格式与中间码类似,但功能上与中间码不同。超轻量物联网虚拟机可以将字节码或者中间码以文件形式保存,从而后续直接对字节码或者中间码进行加载、执行。同时不同语言生成的字节码内容稍有差异,不能相互调用。例如python语言不能直接加载js字节码,但是中间码不存在差异,可以跨语言直接加载调用。
具体来说,一个优选实施例中,上述通过编译器将所述中间码编译成预设格式的字节码包括:
S201,获取所述高级编程语言对应的语法前端模板;
S202,在所述语法前端模板的语法结构树节点中插入所述预设格式的中间码,生成插入结果;
S203,采用编译器对插入结果进行编码生成预设格式的字节码。编译器在编译过程中参考上下文,即上一条或者下一条中间码是什么,同时根据语法前端模板包括的当前语法规则来决定如何生成字节码。
一个优选实施例中,所述字节码的格式为opcode+oprand1+oprand2+……+oprandj,j≥1,opcode为单个字节,用于描述超轻量物联网虚拟机执行流程的单字节操作码。oprandj可以是单个字节、整数或者小数,为opcode后面衔接的操作数,用于表示超轻量物联网虚拟机执行流程时具体需要操作的内容。
一个实施例中,所述字节码的文件格式为:<EVM 标识符> + <数字常量池> + <字符串常量池> + <字节码内容(很多个二进制字节码)> 。
以下通过一个实例来具体说明。首先一个赋值语句对应js语法为:
var a = 10;
这个语法分为三个部分,按顺序依次是:变量名称‘a’,赋值符号‘=’和常量‘10’。超轻量物联网虚拟机将这个语法生成三个中间码表达式:
1. tk_var, a
2. tk_assign
3. tk_integer, 10
此时,超轻量物联网虚拟机的语法解析过程中需要根据语法规则将上述表达式的顺序进行调整,即为:
1. tk_integer, 10
2. tk_var, a
3. tk_assign
按照该顺序,可以依次详细分解每个表达式行为:
1. 将常量数字10压入栈内存。
2. 在当前作用域声明一个变量,名称为a。
3. 如果上一个表达式为tk_var,则将当前栈中的常量10取出,并赋值给tk_var指定的名称的变量,即可以生成上述中间码对应的字节码。
上述以赋值语法进行了实例解说,在本发明的具体应用过程中,变量操作、参数声明、函数声明、闭包声明、条件语句、分支语句、循环语句、作用域、比较表达式、运算表达式、数字常量操作、字符串常量操作等等均可以参考上述方式生成高级编程语言对应的中间码和字节码,以便虚拟机加载执行。
然后执行S3,判断是否是跨语言加载,并结合目标加载时间加载所述预设格式的中间码或预设格式的字节码并执行,输出执行结果。
一个优选实施例中,上述步骤具体为:对所述中间码或者所述字节码进行加载执行时,判断是否是跨语言加载,若是,则使用中间码进行加载;若否,则获取目标加载时间,若目标加载时间小于第一预设值,则加载执行对应的字节码,若目标加载时间大于或者等于第一预设值,则加载执行对应的中间码。
具体来说,字节码文件是针对对应的编程语言,不能跨语言加载。中间码不针对编程语言,可以跨语言调用,且加载中间码后需要进行编译并生成字节码再执行,而字节码文件是超轻量物联网虚拟机可以直接加载执行。所以中间码加载过程要慢于字节码加载。如果需要跨语言加载,则使用中间码。如果不需要跨语言,并且对加载时间有要求,则使用字节码。加载过程通过文件格式中的<EVM 标识符>进行判断,例如跨语言加载字节码文件时,会通过判断<EVM 标识符>而导致报错。
一个优选实施例中,该超轻量物联网虚拟机通过文件系统或者直接从单片机flash或者ram内存中加载字节码或者中间码。加载中间码时,需要进入编译流程,编译后生成字节码。而字节码可以直接被虚拟机识别并执行。具体来说,超轻量物联网虚拟机支持文件系统或者不支持文件系统,如果支持文件系统,超轻量物联网虚拟机可以直接从文件系统读取中间码或者字节码进行加载,如果不支持文件系统,例如单片机,超轻量物联网虚拟机需要指定flash地址或者ram内存地址,首先将字节码或者中间码烧写至指定地址,然后才能进行加载并执行。
在一个优选实施例中,所述超轻量物联网虚拟机采用了全局常量池方法,具体来说,一般虚拟机可以加载多个编程文件,每个编程文件产生的对象或者模块会有独立的常量池,而超轻量物联网虚拟机不需要在虚拟机数据对象内建立常量池,而是加载的所有文件共用一个全局常量池,并将常量进行哈希处理形成哈希表,哈希表是一种存储数据的方式,而在匹配数据对象名称时,采用了哈希整数值比较算法,从而能减少超轻量物联网虚拟机的内存占用,防止多次存储相同内容的常量数据。
一个优选实施例中,还包括垃圾回收步骤,具体为:当出现内存不足时,采用预设标记清扫算法进行第一次垃圾回收,并根据第一次垃圾回收后的当前内存占用状态判断是否采用预设标记清扫算法和/或预设标记压缩算法再次进行垃圾回收。
优选实施例采用了动态调整的垃圾回收方案。具体来说,可以在创建对象、语法解析和/或运行回调函数等运行状态下判断超轻量物联网虚拟机的当前内存占用是否超过初始内存阈值,若是,则可以判定超轻量物联网虚拟机内存不足,此时,首先触发标记清扫,即采用预设标记清扫算法进行第一次垃圾回收。
第一次垃圾回收结束后再次判断超轻量物联网虚拟机的当前内存占用是否超过初始内存阈值,如果没有,则说明当前内存够用,结束垃圾清扫步骤。如果仍旧超过了初始内存阈值,则说明当前内存不够用,此时判断该初始内存阈值是否达到预设标记压缩的启动条件。若没有达到,则说明该初始内存阈值设置较低不适用当前虚拟机工作状态,需要按照比例提高初始内存阈值,并重复以上步骤判断是否再次触发标记清扫。若该初始内存阈值达到了预设标记压缩的启动条件,则生成并发送标记压缩请求,并触发超轻量物联网虚拟机内存不足报警。当发送标记压缩请求后,并不是马上执行预设标记压缩算法,而是等待虚拟机进入空闲时进行内存管理操作。虚拟机进入空闲时是指虚拟机当前并未在runtime执行过程中,并且后台异步请求列队中并没有任何请求在执行虚拟机相关的操作。
上述优选实施例中,为了将超轻量物联网虚拟机运用在内存资源匮乏的芯片上,使用标记清扫算法和标记压缩算法,标记清扫算法的执行速度快,且能够回收垃圾内存对象,但是会产生内存碎片,长期运行会导致内存不足,而标记压缩算法的内存对象需要移动,因此执行速度慢,但是不会产生内存碎片,在内存资源较小的单片机上更稳定安全。本优选实施例将两者进行结合,保证垃圾回收效率同时,避免了垃圾碎片。
一个优选实施例中,对预设格式的中间码或预设格式的字节码进行加载执行时,会判断执行流程中是否存在对应的劫持接口,若存在,则超轻量物联网虚拟机执行所述劫持接口定义的预设劫持流程,并输出执行结果,若不存在,则执行默认流程。上述优选实施例中,该虚拟机设计了一套调用劫持接口,能够封装和兼容其他虚拟机,并原生调用其他虚拟机对象接口,无需二次封装,因此给本虚拟机支持的编程语言提供无差异性的调用方式,并采用灵活的虚拟机扩展技术,使多语言可共享扩展功能。
具体来说,虚拟机的字节码和执行流程设计并不针对任何编程语言特性,基本上能满足大部分编程语言的运行逻辑。但是每个语言都有一些执行逻辑上的不同之处,所以虚拟机标准的字节码执行流程就不能满足这些语言上的不同特性了。因此本实施例的超轻量物联网虚拟机在一些关键的字节码执行流程上增加了劫持接口,如果定义了劫持接口,虚拟机执行劫持接口而不是标准的流程。一个具体实施例中,所述劫持接口包括对象创建操作劫持接口、对象销毁操作劫持接口、成员变量操作劫持接口、函数调用操作劫持接口、数组操作劫持接口、迭代操作劫持接口和字节码操作劫持接口中的一个或者多个。
对象创建操作劫持是虚拟机在执行对象创建过程中,如果定义了劫持,则创建过程由劫持函数来完成,否则按照虚拟机定义的方式执行。
对象销毁操作劫持是当对象被当做垃圾回收时,回收的过程如果定义了劫持,则触发劫持函数。用户可以在劫持函数中定义一些扩展功能,例如释放对象相关性的外部资源。
成员变量操作劫持是定义一个对象如何获取、赋值成员变量。如果定义了劫持函数,则获取、赋值过程由劫持函数来完成,否则按照虚拟机默认方式执行。
函数调用操作劫持是当虚拟机执行编程文件中的函数调用语法时,可以通过劫持函数来定义如何执行该函数,否则采用虚拟机默认方式执行。
数组操作劫持是数组操作可以通过劫持函数来重新定义如何通过索引来获取、赋值数组的操作,否则采用默认方式访问数组。
迭代操作劫持,例如for循环来遍历对象时,可以通过劫持函数来定义迭代器的功能,否则采用默认的迭代器来完成对象成员的遍历操作。
字节码操作劫持是可以重新定义一些字节码的执行功能。
上述劫持接口主要用在不同编程语言对于一些语言执行逻辑上的不同实现。例如:JavaScript中的object.a 和 Python中的object.a,这两种编程语言在访问object对象中的a成员变量时,方式上有很大区别。JavaScript是通过访问object本身成员和object的__proto__成员对象来寻找a成员变量的。而Python则是通过寻找object本身和object的父类继承对象来寻找a成员的。那么不同语言实现则需要提供不同的劫持方法来实现,这里的劫持方法都注册在object对象本身,因此不同的注册过程在语法前端解析过程就已经进行了成功区分。
以上实施例提供了一种跨平台的多语言编译方法,通过提供通用的语法前端构架,并执行一套标准、可扩展的字节码格式,可以满足不同编程语言的语法特性,从而能够快速的将不同语言翻译成同一种中间码,中间码又可以通过编译器即时翻译成虚拟机的字节码格式,而中间码表达内容更为抽象,占用体积相比较字节码更小,从而能够减小在支持多种语言时生成的固件体积。
图2为实施例2提供的一种超轻量物联网虚拟机的结构示意图,如图2所示,包括通用语法前端解析器100、编译器200和执行器300,
所述通用语法前端解析器100用于将高级编程语言形成的源代码转化成预设格式的中间码;
所述编译器200用于将所述中间码编译成预设格式的字节码;
所述执行器300用于判断是否是跨语言加载,并结合目标加载时间加载所述预设格式的中间码或预设格式的字节码并执行,输出执行结果。
一个优选实施例中,所述通用语法前端解析器100包括:
第一获取单元,用于获取与所述高级编程语言对应的grammar文件;
处理单元,用于通过通用语法前端解析器读取任一所述grammar文件,对所述grammar文件进行处理生成对应的语法前端模板,所述语法前端模板为C语言模板且包括所述grammar文件的数据结构;
解析单元,用于通过所述通用语法前端解析器加载对应的语法前端模板,以对所述高级编程语言形成的源代码进行词法分析、语法分析和语义分析,生成预设格式的中间码。
一个优选实施例中,所述编译器200包括:
第二获取单元,用于获取所述高级编程语言对应的语法前端模板;
插入单元,用于在所述语法前端模板的语法结构树节点中插入所述预设格式的中间码,生成插入结果;
编译单元,用于对插入结果进行编码生成预设格式的字节码。
一个优选实施例中,所述执行器300对预设格式的中间码或预设格式的字节码进行加载执行时,用于判断执行流程中是否存在对应的劫持接口,若存在,则执行所述劫持接口定义的预设劫持流程,并输出执行结果;所述劫持接口包括对象创建操作劫持接口、对象销毁操作劫持接口、成员变量操作劫持接口、函数调用操作劫持接口、数组操作劫持接口、迭代操作劫持接口和字节码操作劫持接口中的一个或者多个。
一个优选实施例中,所述执行器300用于通过文件系统对预设格式的中间码或预设格式的字节码进行加载执行;或者用于将预设格式的中间码或预设格式的字节码烧写至单片机的flash地址或者ram内存地址后,从所述flash地址或者ram内存地址中加载所述中间码或者所述字节码。
一个优选实施例中,所述执行器300对所述中间码或者所述字节码进行加载执行时,判断是否是跨语言加载,若是,则使用中间码进行加载,若否,则获取目标加载时间,若目标加载时间小于第一预设值,则加载执行对应的字节码,若目标加载时间大于或者等于第一预设值,则加载执行对应的中间码。
一个优选实施例中,所述超轻量物联网虚拟机还包括垃圾回收模块,所述垃圾回收模块用于当出现内存不足时,采用预设标记清扫算法进行第一次垃圾回收,并根据第一次垃圾回收后的当前内存占用状态判断是否采用预设标记清扫算法和/或预设标记压缩算法再次进行垃圾回收。
具体来说,所述垃圾回收模块包括第一判断单元、第二判断单元、实时更新单元、标记清扫单元、标记压缩单元和报警单元,
第一判断单元,用于在创建对象、语法解析和/或运行回调函数等运行状态下判断超轻量物联网虚拟机的当前内存占用是否超过初始内存阈值,若是,则判定超轻量物联网虚拟机内存不足,并驱动标记清扫单元采用预设标记清扫算法进行第一次垃圾回收;
第二判断单元,用于在第一次垃圾回收结束后再次判断当前内存占用是否超过初始内存阈值,如果否,则判定当前内存够用,结束垃圾清扫步骤;若是,则判断该初始内存阈值是否达到预设标记压缩的启动条件,并在没有达到时驱动实时更新单元按照比例提高初始内存阈值,并驱动所述第一判断单元判断是否再次触发标记清扫;若达到了所述启动条件,则驱动标记压缩单元生成并发送标记压缩请求,并驱动报警单元生成内存不足的报警提示。当发送标记压缩请求后,并不是马上执行预设标记压缩算法,而是等待虚拟机进入空闲时进行内存管理操作。虚拟机进入空闲时是指虚拟机当前并未在runtime执行过程中,并且后台异步请求列队中并没有任何请求在执行虚拟机相关的操作。
以上实施例提供了一种超轻量物联网虚拟机,拥有一种通用的语法前端构架,执行一套标准、可扩展的字节码格式,可以满足不同编程语言的语法特性,从而能够快速的将不同语言翻译成同一种中间码,中间码又可以通过编译器即时翻译成虚拟机的字节码格式,而中间码表达内容更为抽象,占用体积相比较字节码更小,从而能够减小在支持多种语言时生成的固件体积。
读者应理解,在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

Claims (8)

1.一种跨平台的多语言编译方法,其特征在于,包括以下步骤:
步骤1,通过通用语法前端解析器将高级编程语言形成的源代码转化成预设格式的中间码;
步骤2,通过编译器将所述中间码编译成预设格式的字节码;
步骤3,判断是否是跨语言加载,并结合目标加载时间加载所述预设格式的中间码或所述预设格式的字节码并执行,输出执行结果;
所述通过通用语法前端解析器将高级编程语言形成的源代码转化成预设格式的中间码具体包括:
S101,获取与所述高级编程语言对应的grammar文件;
S102,通过通用语法前端解析器读取任一所述grammar文件,对所述grammar文件进行处理生成对应的语法前端模板,所述语法前端模板为C语言模板且包括所述grammar文件的数据结构;
S103,通过所述通用语法前端解析器加载对应的语法前端模板,以对所述高级编程语言形成的源代码进行词法分析、语法分析和语义分析,生成预设格式的中间码;
所述通过编译器将所述中间码编译成预设格式的字节码具体为:
S201,获取所述高级编程语言对应的语法前端模板;
S202,在所述语法前端模板的语法结构树节点中插入所述预设格式的中间码,生成插入结果;
S203,采用编译器对插入结果进行编码生成预设格式的字节码。
2.根据权利要求1所述跨平台的多语言编译方法,其特征在于,所述高级编程语言包括Python语言、JavaScript语言、Lua语言、HTML语言、CSS语言和QML语言中的一个或多个。
3.根据权利要求1所述跨平台的多语言编译方法,其特征在于,对预设格式的中间码或预设格式的字节码进行加载执行时,判断执行流程中是否存在对应的劫持接口,若存在,则执行所述劫持接口定义的预设劫持流程,并输出执行结果;
所述劫持接口包括对象创建操作劫持接口、对象销毁操作劫持接口、成员变量操作劫持接口、函数调用操作劫持接口、数组操作劫持接口、迭代操作劫持接口和字节码操作劫持接口中的一个或者多个。
4.根据权利要求1-3任一所述跨平台的多语言编译方法,其特征在于,对预设格式的中间码或预设格式的字节码进行加载执行,具体为:
通过文件系统对预设格式的中间码或预设格式的字节码进行加载执行;或者将预设格式的中间码或预设格式的字节码烧写至单片机的flash地址或者ram内存地址后,从所述flash地址或者ram内存地址中加载所述中间码或者所述字节码。
5.根据权利要求4所述跨平台的多语言编译方法,其特征在于,对所述中间码或者所述字节码进行加载执行时,判断是否是跨语言加载,若是,则使用中间码进行加载,若否,则获取目标加载时间,若目标加载时间小于第一预设值,则加载执行对应的字节码,若目标加载时间大于或者等于第一预设值,则加载执行对应的中间码。
6.根据权利要求5所述跨平台的多语言编译方法,其特征在于,还包括垃圾回收步骤,具体为:当出现内存不足时,采用预设标记清扫算法进行第一次垃圾回收,并根据第一次垃圾回收后的当前内存占用状态判断是否采用预设标记清扫算法和/或预设标记压缩算法再次进行垃圾回收。
7.一种超轻量物联网虚拟机,利用权利要求1-6任一所述跨平台的多语言编译方法,其特征在于,包括通用语法前端解析器、编译器和执行器,
所述通用语法前端解析器用于将高级编程语言形成的源代码转化成预设格式的中间码;
所述编译器用于将所述中间码编译成预设格式的字节码;
所述执行器用于判断是否是跨语言加载,并结合目标加载时间加载所述预设格式的中间码或预设格式的字节码并执行,输出执行结果。
8.根据权利要求7所述超轻量物联网虚拟机,其特征在于,还包括垃圾回收模块,所述垃圾回收模块用于当出现内存不足时,采用预设标记清扫算法进行第一次垃圾回收,并根据第一次垃圾回收后的当前内存占用状态判断是否采用预设标记清扫算法和/或预设标记压缩算法再次进行垃圾回收。
CN202111038252.XA 2021-09-06 2021-09-06 一种跨平台的多语言编译方法和超轻量物联网虚拟机 Active CN113703779B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111038252.XA CN113703779B (zh) 2021-09-06 2021-09-06 一种跨平台的多语言编译方法和超轻量物联网虚拟机

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111038252.XA CN113703779B (zh) 2021-09-06 2021-09-06 一种跨平台的多语言编译方法和超轻量物联网虚拟机

Publications (2)

Publication Number Publication Date
CN113703779A CN113703779A (zh) 2021-11-26
CN113703779B true CN113703779B (zh) 2024-04-16

Family

ID=78660226

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111038252.XA Active CN113703779B (zh) 2021-09-06 2021-09-06 一种跨平台的多语言编译方法和超轻量物联网虚拟机

Country Status (1)

Country Link
CN (1) CN113703779B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114371852B (zh) * 2022-01-13 2023-10-24 抖音视界有限公司 一种编译方法及装置
CN114513566A (zh) * 2022-02-17 2022-05-17 上海阅维科技股份有限公司 自定义网络协议解析方法、系统、介质及电子设备

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002024032A (ja) * 2000-06-21 2002-01-25 Microsoft Corp 複数言語のコンパイル方法及びシステム
CN101246420A (zh) * 2007-12-29 2008-08-20 中国建设银行股份有限公司 多语言系统实现统一开发的方法及系统
KR20140109066A (ko) * 2013-03-05 2014-09-15 한국과학기술연구원 연산자의 값의 범위를 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
KR20150134681A (ko) * 2014-05-22 2015-12-02 박경란 다수의 이기종 컴퓨팅 플랫폼을 지원하며 타분야 간에 데이터 상호호환이 가능한 크로스 플랫폼 기반의 개방형 bim 시스템의 구축 방법
WO2018018797A1 (zh) * 2016-07-25 2018-02-01 百富计算机技术(深圳)有限公司 功能模块跨平台运行的实现方法和装置
CN108874396A (zh) * 2018-05-31 2018-11-23 苏州蜗牛数字科技股份有限公司 基于hlsl的多平台多目标语言的交叉编译器及编译方法
CN109255209A (zh) * 2017-07-13 2019-01-22 阿里巴巴集团控股有限公司 一种数据处理方法、装置、设备和存储介质
CN109871284A (zh) * 2017-12-05 2019-06-11 北京元比特科技有限责任公司 一种应用程序跨语言运行时环境执行的虚拟化技术及方法
CN109901924A (zh) * 2017-12-08 2019-06-18 北京元比特科技有限责任公司 一种通用的万物互联的软件技术及方法
CN110187885A (zh) * 2019-06-10 2019-08-30 合肥本源量子计算科技有限责任公司 一种量子程序编译的中间代码生成方法及装置
CN110471670A (zh) * 2019-08-20 2019-11-19 杭州和利时自动化有限公司 一种编译器、编译方法和追踪方法及dcs控制器
CN111209004A (zh) * 2019-12-30 2020-05-29 北京健康之家科技有限公司 代码转换方法及装置
CN111880800A (zh) * 2020-06-19 2020-11-03 深圳融卡智能科技有限公司 应用下载方法与应用下载系统
CN112052006A (zh) * 2020-08-12 2020-12-08 武汉天喻信息产业股份有限公司 一种软件代码编译方法及系统

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060271920A1 (en) * 2005-05-24 2006-11-30 Wael Abouelsaadat Multilingual compiler system and method
US8555264B2 (en) * 2011-01-14 2013-10-08 Oracle International Corporation System and method for efficient compilation and invocation of function type calls
US10331425B2 (en) * 2017-06-28 2019-06-25 Google Llc Automated source code adaption to inject features between platform versions
US11409506B2 (en) * 2018-09-26 2022-08-09 Intel Corporation Data plane semantics for software virtual switches

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002024032A (ja) * 2000-06-21 2002-01-25 Microsoft Corp 複数言語のコンパイル方法及びシステム
CN101246420A (zh) * 2007-12-29 2008-08-20 中国建设银行股份有限公司 多语言系统实现统一开发的方法及系统
KR20140109066A (ko) * 2013-03-05 2014-09-15 한국과학기술연구원 연산자의 값의 범위를 이용한 중간 언어 변환 방법과 그를 위한 시스템 및 컴퓨터로 읽을 수 있는 기록매체
KR20150134681A (ko) * 2014-05-22 2015-12-02 박경란 다수의 이기종 컴퓨팅 플랫폼을 지원하며 타분야 간에 데이터 상호호환이 가능한 크로스 플랫폼 기반의 개방형 bim 시스템의 구축 방법
WO2018018797A1 (zh) * 2016-07-25 2018-02-01 百富计算机技术(深圳)有限公司 功能模块跨平台运行的实现方法和装置
CN109255209A (zh) * 2017-07-13 2019-01-22 阿里巴巴集团控股有限公司 一种数据处理方法、装置、设备和存储介质
CN109871284A (zh) * 2017-12-05 2019-06-11 北京元比特科技有限责任公司 一种应用程序跨语言运行时环境执行的虚拟化技术及方法
CN109901924A (zh) * 2017-12-08 2019-06-18 北京元比特科技有限责任公司 一种通用的万物互联的软件技术及方法
CN108874396A (zh) * 2018-05-31 2018-11-23 苏州蜗牛数字科技股份有限公司 基于hlsl的多平台多目标语言的交叉编译器及编译方法
CN110187885A (zh) * 2019-06-10 2019-08-30 合肥本源量子计算科技有限责任公司 一种量子程序编译的中间代码生成方法及装置
CN110471670A (zh) * 2019-08-20 2019-11-19 杭州和利时自动化有限公司 一种编译器、编译方法和追踪方法及dcs控制器
CN111209004A (zh) * 2019-12-30 2020-05-29 北京健康之家科技有限公司 代码转换方法及装置
CN111880800A (zh) * 2020-06-19 2020-11-03 深圳融卡智能科技有限公司 应用下载方法与应用下载系统
CN112052006A (zh) * 2020-08-12 2020-12-08 武汉天喻信息产业股份有限公司 一种软件代码编译方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
基于栈式虚拟机的开发和运行平台的设计与实现;朱成光;夏清国;;科学技术与工程;20070515(第10期);全文 *

Also Published As

Publication number Publication date
CN113703779A (zh) 2021-11-26

Similar Documents

Publication Publication Date Title
CN108139896B (zh) 扩展虚拟机指令集体系架构
CN107041158B (zh) 用于模块化反射的限制性访问控制
US20170228223A1 (en) Unified data type system and method
CN106462425B (zh) 使用复常量的方法和系统
US7661096B2 (en) Interaction with nested and non-nested streams
US5854932A (en) Compiler and method for avoiding unnecessary recompilation
US6738968B1 (en) Unified data type system and method
CN113703779B (zh) 一种跨平台的多语言编译方法和超轻量物联网虚拟机
CN107924326B (zh) 对经更新的类型的迁移方法进行覆盖
US20090138847A1 (en) Optimized code generation by eliminating unused virtual function
US8464232B2 (en) Compiler compiler system with syntax-controlled runtime and binary application programming interfaces
JPH08339304A (ja) 機械独立コードを含むプラットフォーム標準オブジェクト・ファイルを生成する方法および装置
US20040003377A1 (en) Converting byte code instructions to a new instruction set
US8818967B2 (en) Method for compressing identifiers
CN112052006B (zh) 一种软件代码编译方法及系统
US20160246622A1 (en) Method and system for implementing invocation stubs for the application programming interfaces embedding with function overload resolution for dynamic computer programming languages
WO2024045379A1 (zh) 编译方法和编译器、Wasm虚拟机
CN113296786B (zh) 数据处理方法、装置、电子设备及存储介质
CN112558984A (zh) 代码编译的方法、装置、电子设备以及服务器
US7590976B2 (en) Compiler program, a computer-readable storage medium storing a compiler program, a compiling method and a compiling unit
CN110110299B (zh) 文本变换方法、装置以及服务器
CN112905271A (zh) 一种应用程序接口api的调用方法、装置及电子设备
CN113687833A (zh) 混合编译方法、混合编译系统、编译器及存储介质
CN111399842A (zh) 一种代码编译方法及装置
CN115309405B (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
TA01 Transfer of patent application right

Effective date of registration: 20220130

Address after: 430074 room 1501, unit 2, building 8, Fenglin Shangcheng, No. 968, Xiongchu Avenue, Hongshan District, Wuhan City, Hubei Province

Applicant after: Wang Zhe

Address before: 430074 room 09, 11th floor, zisong building (Fengshang International), 159 Minzu Avenue, Hongshan District, Wuhan City, Hubei Province

Applicant before: Wuhan bytecode Technology Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant