CN111209005B - 程序文件的编译方法、装置和计算机可读存储介质 - Google Patents

程序文件的编译方法、装置和计算机可读存储介质 Download PDF

Info

Publication number
CN111209005B
CN111209005B CN202010008323.0A CN202010008323A CN111209005B CN 111209005 B CN111209005 B CN 111209005B CN 202010008323 A CN202010008323 A CN 202010008323A CN 111209005 B CN111209005 B CN 111209005B
Authority
CN
China
Prior art keywords
program file
compiling
compiled
file
type
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
CN202010008323.0A
Other languages
English (en)
Other versions
CN111209005A (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.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen 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 Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202010008323.0A priority Critical patent/CN111209005B/zh
Publication of CN111209005A publication Critical patent/CN111209005A/zh
Application granted granted Critical
Publication of CN111209005B publication Critical patent/CN111209005B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请实施例公开了一种程序文件的编译方法、装置和计算机可读存储介质;接收终端上传的原始程序文件,并对所述原始程序文件的类型进行识别;当识别到所述原始程序文件的类型为接口代码文件类型时,确定所述原始程序文件在终端***中对应的接口编译版本;基于所述接口代码文件类型,将所述原始程序文件转换成目标语法结构的目标程序文件;基于所述目标程序文件,云服务器可以生成待编译程序文件;基于所述接口编译版本,对所述待编译程序文件进行编译,得到编译后程序文件。该方案可以提高程序文件编译的效率。

Description

程序文件的编译方法、装置和计算机可读存储介质
技术领域
本申请涉及通信技术领域,具体涉及一种程序文件的编译方法、装置和计算机可读存储介质。
背景技术
随着通信技术的发展,在各种***平台中,添加了越来越多的程序文件,在相关浏览器中安装相应程序文件后,浏览器可以直接调用该程序文件,程序文件的定位是开发实现原纯净***平台、应用软件平台不具备的功能的程序。
在对相关技术的研究和实践过程中,本申请的发明人发现现有的程序文件的编译方式都是通过在本地或者上服务上通过命令行工具进行编译扩展,编译开发成本高,每个要编译的开发者都需要搭建一套编译环境,可复用性不高,程序文件编译的效率低。
发明内容
本申请实施例提供一种程序文件的编译方法、装置和计算机可读存储介质,可以提高程序文件编译的效率。
本申请实施例提供了一种程序文件的编译方法,包括:
接收终端上传的原始程序文件,并对所述原始程序文件的类型进行识别;
当识别到所述原始程序文件的类型为接口代码文件类型时,确定所述原始程序文件在终端***中对应的接口编译版本;
基于所述接口代码文件类型,将所述原始程序文件转换成目标语法结构的目标程序文件;
基于所述目标程序文件,生成待编译程序文件;
基于所述接口编译版本,对所述待编译程序文件进行编译,得到编译后程序文件。
相应的,本申请实施例提供了一种程序文件的编译装置,包括:
接收单元,用于接收终端上传的原始程序文件,并对所述原始程序文件的类型进行识别;
第一确定单元,用于当识别到所述原始程序文件的类型为接口代码文件类型时,确定所述原始程序文件在终端***中对应的接口编译版本;
转换单元,用于基于所述接口代码文件类型,将所述原始程序文件转换成目标语法结构的目标程序文件;
生成单元,用于基于所述目标程序文件,生成待编译程序文件;
第一编译单元,用于基于所述接口编译版本,对所述待编译程序文件进行编译,得到编译后程序文件。
在一实施例中,所述转换单元,包括:
切割子单元,用于基于所述接口代码文件类型,将所述原始程序文件按照预设规则进行切割,得到切割后的数组;
转换子单元,用于将所述数组转换成目标语法结构的目标程序文件。
在一实施例中,所述生成单元,包括:
解析子单元,用于对所述目标程序文件进行解析,得到解析后的属性数据信息;
整合子单元,用于对所述属性数据信息进行整合,生成待编译程序文件。
在一实施例中,所述整合子单元还用于获取所述解析后的属性数据信息对应的骨架代码;将所述属性数据信息和所述骨架代码进行合并,生成待编译程序文件。
在一实施例中,所述第一编译单元,包括:
第一接收子单元,用于接收编译指令;
设置子单元,用于基于所述接口编译版本,设置临时编译环境参数,得到临时编译环境参数;
编译子单元,用于根据所述编译指令和所述临时编译环境参数,对所述待编译程序文件进行编译,得到编译后程序文件。
在一实施例中,所述编译子单元还包括:
检测子单元,用于对所述编译后程序文件的状态进行检测,得到检测结果;
第二接收子单元,用于接收终端发送的编译后程序文件获取请求;
发送子单元,用于基于所述检测结果和所述编译后程序文件获取请求,将所述编译后程序文件发送到所述终端。
在一实施例中,所述程序文件的编译装置还包括:
第二确定单元,用于当所述原始程序文件的类型为扩展程序类型时,确定所述原始程序文件在终端***中对应的扩展编译版本;
第二编译单元,用于基于所述扩展编译版本,对所述原始程序文件进行编译,得到编译后的扩展程序文件。
相应的,本申请实施例还提供了一种计算机设备,包括存储器,处理器及存储在储存器上并可在处理器上运行的计算机程序,其中,所述处理器执行本申请实施例任一提供的程序文件的编译方法中的步骤。
相应的,本申请实施例还提供一种计算机可读存储介质,所述存储介质存储有多条指令,所述指令适用于处理器进行加载,以执行本申请实施例任一提供的程序文件的编译方法中的步骤。
本申请实施例可以接收终端上传的原始程序文件,并对所述原始程序文件的类型进行识别;当识别到所述原始程序文件的类型为接口代码文件类型时,确定所述原始程序文件在终端***中对应的接口编译版本;基于所述接口代码文件类型,将所述原始程序文件转换成目标语法结构的目标程序文件;基于所述目标程序文件,生成待编译程序文件;基于所述接口编译版本,对所述待编译程序文件进行编译,得到编译后程序文件。该方案可以通过识别上传的原始程序文件的类型来确定程序编译的版本,然后可以对待编译的程序文件进行编译,可以不用搭建一套编译环境,程序文件编译的效率高。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的程序文件的编译方法的场景示意图;
图2是本申请实施例提供的程序文件的编译方法的流程图;
图3是本申请实施例提供的程序文件的编译方法的扩展的整体使用流程图;
图4是本申请实施例提供的程序文件的编译方法的实现流程图;
图5是本申请实施例提供的程序文件的编译方法的编译平台示意图;
图6是本申请实施例提供的程序文件的编译方法的区别示意图;
图7是本申请实施例提供的程序文件的编译方法的另一编译平台示意图;
图8是本申请实施例提供的程序文件的编译方法的技术架构图;
图9是本申请实施例提供的区块链***的结构示意图;
图10是本申请实施例提供的程序文件的编译方法的另一流程图;
图11是本申请实施例提供的程序文件的编译方法的装置图;
图12是本申请实施例提供的程序文件的编译方法的另一装置图;
图13是本申请实施例提供的计算机设备的结构示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供一种程序文件的编译方法、装置和计算机可读存储介质。具体地,本申请实施例提供适用于计算机设备的程序文件的编译装置。其中,该计算机设备可以为终端或服务器等设备,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式***,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
参考图1,以计算机设备为服务器为例,该服务器可以接收终端上传的原始程序文件,并对该原始程序文件的类型进行识别;当识别到该原始程序文件的类型为接口代码文件类型时,确定该原始程序文件在终端***中对应的接口编译版本;基于该接口代码文件类型,将该原始程序文件转换成目标语法结构的目标程序文件;基于该目标程序文件,生成待编译程序文件;基于该接口编译版本,对该待编译程序文件进行编译,得到编译后程序文件。
其中,该目标程序文件可以基于云平台进行编译,生成编译后程序文件,而云平台也称云计算平台,是指基于硬件资源和软件资源的服务,提供计算、网络和存储能力。云计算(cloud computing)是一种计算模式,它将计算任务分布在大量计算机构成的资源池上,使各种应用***能够根据需要获取计算力、存储空间和信息服务。提供资源的网络被称为“云”。“云”中的资源在使用者看来是可以无限扩展的,并且可以随时获取,按需使用,随时扩展,按使用付费。
作为云计算的基础能力提供商,会建立云计算资源池(简称云平台,一般称为IaaS(Infrastructure as a Service,基础设施即服务)平台,在资源池中部署多种类型的虚拟资源,供外部客户选择使用。云计算资源池中主要包括:计算设备(为虚拟化机器,包含操作***)、存储设备、网络设备。
按照逻辑功能划分,在IaaS(Infrastructure as a Service,基础设施即服务)层上可以部署PaaS(Platform as a Service,平台即服务)层,PaaS层之上再部署SaaS(Software as a Service,软件即服务)层,也可以直接将SaaS部署在IaaS上。PaaS为软件运行的平台,如数据库、web容器等。SaaS为各式各样的业务软件,如web门户网站、***器等。一般来说,SaaS和PaaS相对于IaaS是上层。
由以上可知,本实施例通过识别上传的原始程序文件的类型来确定程序编译的版本,然后可以对待编译的程序文件进行编译,可以不用搭建一套编译环境,程序文件编译的效率高。
以下分别进行详细说明,需说明的是,以下实施例的描述顺序不作为对实施例优选顺序的限定。
本申请实施例将从程序文件的编译装置的角度进行描述,该程序文件的编译装置具体可以集成在服务器中。
本申请实施例提供一种程序文件的编译方法,该方法可以由服务器或终端执行,也可以由终端和服务器共同执行;本申请实施例以程序文件的编译方法由服务器执行为例进行说明,具体的,由集成在服务器中的程序文件的编译装置来执行。参考图2,该程序文件的编译方法的具体流程可以如下:
101、接收终端上传的原始程序文件,并对该原始程序文件的类型进行识别。
其中,终端上传的原始程序文件的类型可以为多种类型,比如,原始程序文件的类型可以为接口代码文件类型,也可以为扩展程序文件类型,还可以为其他类型,等等。
其中,不同类型的原始程序文件,在终端***中对应的编译版本不同,可以对终端上传的原始程序文件进行类型识别,根据识别到的类型来确定编译版本,比如,当对原始程序文件的文件类型识别,得到该原始程序文件的类型为接口代码文件类型时,可以在终端***中选择对应的接口编译版本,而当原始程序文件的类型为扩展程序类型时,可以在终端***中选择对应的扩展编译版本,选择对应的编译版本以对程序文件进行编译而得到编译后程序文件。
在一实施例中,为了得到编译后的程序文件,在确定终端上传的原始程序文件的类型为扩展程序类型后,可以对该原始程序文件进行编译,具体如下:
当该原始程序文件的类型为扩展程序类型时,确定该原始程序文件在终端***中对应的扩展编译版本;
基于该扩展编译版本,对该原始程序文件进行编译,得到编译后的扩展程序文件。
例如,以原始程序文件为扩展源码为例进行说明,Node.js(一种能够在服务器端运行编程语言的开放源代码、跨平台编程语言运行环境)扩展的整体使用流程可以如图3所示,终端可以上传开发的扩展源码到在线扩展编译平台进行编译,之后可以推送、下载、上传扩展到扩展管理平台,业务服务在使用的时候可以从扩展平台获取安装即可。
其中,扩展也可以称为插件,是用程序设计语言(C++)编写的动态链接共享对象,可以使用函数加载到Node.js中,且像普通的Node.js模块一样被使用,主要用于为运行在Node.js中的编程语言(JavaScript)与C/C++库之间提供接口。
102、当识别到该原始程序文件的类型为接口代码文件类型时,确定该原始程序文件在终端***中对应的接口编译版本。
其中,可以根据上传的原始程序文件的类型选择编译版本,原始程序文件的类型为接口代码文件类型时,可以选择对应的接口编译版本。
参考图4,首先可以获取一台服务器,安装上Node.js,将在线编译***部署到服务器上,并启动服务器,这时在浏览器中输入网址就可以访问如图5所示的编译***页面,用户可以上传自己的原始程序文件,比如,类型为扩展程序类型的原始程序文件或者类型为接口代码文件类型的原始程序文件,等等,然后可以根据上传的原始程序文件的类型选择编译的版本,点击编辑进行编译,然后***会调用编译接口程序,当该原始程序文件的类型为扩展程序文件时,执行壳(Shell)脚本来运行整个编译过程,首先需要下载需要编译的Node.js版本,并同时设置临时环境变量,执行编译命令,检查编译后的文件是否存在,如果存在,则检查编译后的文件是否可用,最终***会定期检查编译的最终状态,如果超过一定时间未返回状态则认为编译失败,最后返回编译结果进行保存编译的结果,用户可以在网站上直接下载编译好的程序文件了。
103、基于该接口代码文件类型,将该原始程序文件转换成目标语法结构的目标程序文件。
其中,当原始程序文件的类型为接口代码文件类型时,可以将该原始程序文件转换成目标语法结构的目标程序文件,比如,如图4所示,当上传的原始程序文件的类型为接口程序文件类型时,可以在网页中选择需要编译的版本为接口编译版本,然后调用程序编译接口,走代码自动生成逻辑,读取原始程序文件,基于抽象语法树(Abstract SyntaxTree,AST)分析该读取后的原始程序文件,生成目标语法结构的目标程序文件。
其中,抽象语法树或简称语法树(Syntax tree),是一种源代码语法结构的一种抽象表示,以树状的形式表现变成语言的语法结构,树上的每个节点都表示源代码中的一种结构。
在一实施例中,为了将原始程序文件转换成目标语法结构的目标原始程序文件,可以将原始程序文件进行切割处理,比如,步骤“基于该接口代码文件类型,将该原始程序文件转换成目标语法结构的目标程序文件”,可以包括:
基于该接口代码文件类型,将该原始程序文件按照预设规则进行切割,得到切割后的数组;
将该数组转换成目标语法结构的目标程序文件。
104、基于该目标程序文件,生成待编译程序文件。
其中,可以对目标程序文件进行处理以生成待编译程序文件,而待编译程序可以进行编译,编译后得到所需的编译后程序文件。
在一实施例中,为了得到待编译程序文件,具体的步骤“基于该目标程序文件,生成待编译程序文件”,可以包括:
对该目标程序文件进行解析,得到解析后的属性数据信息;
对该属性数据信息进行整合,生成待编译程序文件。
其中,可以解析出目标程序文件中的方法名、参数名,参数类型等,然后,对这些信息进行整合,生成待编译程序文件。
在一实施例中,步骤“对该属性数据信息进行整合,生成待编译程序文件”,可以包括:
获取该解析后的属性数据信息对应的骨架代码;
将该属性数据信息和该骨架代码进行合并,生成待编译程序文件。
例如,可以获取对应的接口模板骨架代码,比如,N-api(接口,即用于开发C++原生模块的接口)/Nan(Native Abstraction for Node.js,即Node.js原生模板抽象接口),然后,将解析出来的属性数据信息和模板骨架代码进行合并,最终可以生成待编译程序文件。
105、基于该接口编译版本,对该待编译程序文件进行编译,得到编译后程序文件。
其中,编译就是把高级语言变成计算机可以识别的二进制语言,计算机只认识1和0,编译程序把人们熟悉的语言换成二进制的,比如,编译程序把待编译程序文件换成二进制的程序文件。比如,编译程序可以把一个源程序翻译成目标程序的工作过程分为五个阶段:词法分析、语法分析、语义检查和中间代码生成、代码优化、以及目标代码生成。主要是进行词法分析和语法分析,又称为源程序分析,分析过程中发现有语法错误,给出提示信息。
在一实施例中,步骤“基于该接口编译版本,对该待编译程序文件进行编译,得到编译后程序文件”,可以包括:
接收编译指令;
基于该接口编译版本,设置临时编译环境参数,得到临时编译环境参数;
根据该编译指令和该临时编译环境参数,对该待编译程序文件进行编译,得到编译后程序文件。
例如,其中,参见图6,本申请实施例可以将手工坊式的开发,转变成通过***自动化实施的方式开发,可以选择编译的版本,可以得到编译后程序文件,操作较之以往更为简洁,如图7所示,在浏览器中访问程序文件云编译平台,用户可以上传自己的程序文件,然后选择Node.js版本,可以点击编译控件进行编译,在程序文件云编译平台还可以浏览的在该编译平台程序文件编译的次数、用户浏览的次数、以及下载编译后程序文件的次数,等等。
在一实施例中,为了确保终端下载下来的编译后程序文件可用,还可以定期检查编译的最终状态,比如,可以包括以下步骤:
对该编译后程序文件的状态进行检测,得到检测结果;
接收终端发送的编译后程序文件获取请求;
基于该检测结果和该编译后程序文件获取请求,将该编译后程序文件发送到该终端。
例如,对编译后程序文件进行检查,检查该编译后程序文件是否存在,如果存在则检查编译后程序文件是否可用,最终还可以定期检查编译的最终状态,如果超过一定时间未返回状态则会认为编译失败,最终编译状态有下列情况:
Figure BDA0002356134890000091
参见图8,主要的在线编译平台的一些功能实现层,插件(Addon,插件)模块主要是用户上传的程序文件,比如,原始程序文件;软件程序(Controller,是一运行在独立的服务器上的软件程序,可以用各种不同的语言来实现,可以运行在不同的操作***上)模块主要对外提供的一些全球广域网(World Wide Web,web)服务的应用程序变成接口(api);程序语言存储类型模块(Auto c/c++moudle)是实现了将C/C++接口文件生成,结点(node,结点)扩展的逻辑实现;创建程序(Build shell)模块是执行在线编译过程中,下载node文件,设置临时环境变量,执行编译命令,生成扩展压缩文件;视野控件(View)模块则是通过http请求web服务的api接口。实现的一个服务端渲染(Server Side Render,缩写为SSR),为在线编译平台提供web服务。
其中,服务端渲染(Server Side Render),传统的服务端渲染可以使用计算机编程语言(Java、php)等开发语言来实现,随着Node.js和相关前端领域技术的不断进步,前端同学也可以基于此完成独立的服务端渲染。
在一实施例中,可以将编译后程序文件存储到区块链中,以方便后续信息的提取存储,如图9所示,该计算机设备可以为分布式***中的一个节点,其中,该分布式***可以为区块链***,该区块链***可以是由多个节点通过网络通信的形式连接形成的分布式***,节点之间可以组成点对点(P2P,Peer To Peer)网络,任意形式的计算机设备,比如服务器、终端等电子设备都可以通过加入该点对点网络而成为该区块链***中的一个节点,其中,区块链,包括一系列按照产生的先后时间顺序相互接续的区块(Block),新区块一旦加入到区块链中就不会再被移除,区块中记录了区块链***中节点提交的记录数据。
由以上可知,本实施例通过识别上传的原始程序文件的类型来确定程序编译的版本,然后可以对待编译的程序文件进行编译,可以不用搭建一套编译环境,程序文件编译的效率高。
根据上述介绍的内容,下面将举例来进一步说明本申请的程序文件的编译方法。
本申请实施例,将以程序文件的编译装置集成在服务器为例来说明。参考图10,一种程序文件的编译方法,具体流程可以如下:
201、服务器接收终端上传的原始程序文件,并对该原始程序文件的类型进行识别。
例如,服务器可以识别终端上传的原始程序文件,当识别到该原始程序文件的类型为扩展程序类型时,确定该原始程序文件在如图5所示的扩展编译版本,然后可以点击编译控件即可对该原始程序原件进行编译,得到编译后程序文件。当识别到的原始程序文件的类型为接口代码文件类型时,选择的编译版本有所不同。
202、当识别到该原始程序文件的类型为接口代码文件类型时,服务器确定该原始程序文件在终端***中对应的接口编译版本。
例如,参考图4,当识别到该原始程序文件的类型为接口代码文件类型时,在可以在云平台的网页中选择需要编译的版本为接口编译版本,然后调用程序编译接口,走代码自动生成逻辑,读取原始程序文件,基于抽象语法树(Abstract Syntax Tree,AST)分析该读取后的原始程序文件,生成目标语法结构的目标程序文件。
203、基于该接口代码文件类型,服务器将该原始程序文件转换成目标语法结构的目标程序文件。
例如,服务器可以将原始程序文件基于抽象语法树(Abstract Syntax Tree,AST)转换成树形结构的目标程序文件。
抽象语法树不依赖与具体的文法,不依赖与语言的细节,将原始程序文件转化为AST后,可以对AST做很多操作,这些操作可以实现各种各样形形色色的功能。抽象语法树是源代码的抽象语法结构的树状表示,树上的每个节点都表示源代码中的一种结构,之所以说是抽象的,是因为抽象语法树并不会表示出真实语法出现的每一个细节,比如说,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现。抽象语法树并不依赖于源语言的语法,也就是说语法分析阶段所采用的上下文无文文法,因为在写文时,经常会对文法进行等价的转换(消除做递归、回溯、二义性等),这样会给文法分析引入一些多余的成分,对后续阶段造成不利影响,甚至会使合个阶段变得混乱,因此,很多编译器经常要独立地构造语法分析树,为前端、后端建立一个清晰的接口,抽象语法树在很多领域有广泛的应用,比如浏览器、智能编辑器、编译器等。
其中,当该原始程序文件的类型为接口代码文件类型,可以基于AST分析该原始程序文件,可以将该原始程序文件按照预设规则进行切割,得到切割后数组,再将该数组装换成树形结构的目标程序文件。
比如,基于AST分析该原始程序文件,生成树形语法结构的目标程序文件时,可以先读取原始程序文件,然后按照预定的规则对该原始程序文件进行切割,并移除空白符、注释等,最后整个原始程序文件将被分割近一个数组列表,得到数组,当词法分析该原始程序文件时的时候,可以一个一个字母的读取代码,所以很形象地称之为扫描(scans),当遇到空格、操作符或者特殊符号时,可以认为一个话已经完成了,最后将词法分析出来的数组转换成树形结构的形式,得到目标程序文件,同时,可以验证语法,如果语法有错的话,抛出语法错误。
204、基于该目标程序文件,服务器生成待编译程序文件。
例如,可以解析出该目标程序文件的方法名、参数名、方法返回类型、以及参数类型等存入内存中,然后获取对应的接口模板骨架,比如,N-api(接口,即用于开发C++原生模块的接口)/Nan(Native Abstraction for Node.js,即Node.js原生模板抽象接口),然后可以将存入内存中的方法名、参数名、方法返回类型、以及参数类型等与该接口模板骨架中的骨架代码进行合并,生成待编译程序文件。
其中,骨架代码指的是将常用方法都写好在代码里了,使用的时候按照需求修改代码就可以用的代码。
205、基于该接口编译版本,服务器对该待编译程序文件进行编译,得到编译后程序文件。
其中,当接收编译指令时,可以基于该接口编译版本,设置临时编译环境参数,不同编译版本可能需要调整一些编译环境参数,得到临时编译环境参数,最后,根据该编译指令和该临时编译环境参数,对原始程序文件进行编译,可以得到编译后程序文件。
其中,为了确保终端下载下来的编译后程序文件可用,还可以在对该原始程序文件进行编译后,检测该编译后程序文件的状态,最终的状态可能会出现的情况可以有以下几种情况:未编译;编译中;编译失败,编译状态返回;编译超时;编译成功。当检测到该编译后程序文件的状态为编译成功状态时,基于接收到终端发送的编译后程序文件获取请求,向该终端发送该编译后原始程序文件,若检测到该编译后程序文件的状态为未编译;编译中;编译失败,编译状态返回;编译超时等,则可以对该编译后程序文件进行处理。
由以上可知,本实施例通过识别上传的原始程序文件的类型来确定程序编译的版本,然后可以对待编译的程序文件进行编译,可以不用搭建一套编译环境,程序文件编译的效率高。
为了更好地实施以上方法,相应的,本申请实施例还提供一种程序文件的编译装置,其中,该程序文件的编译装置具体可以集成在服务器中,参考图11,该程序文件的编译装置可以包括接收单元301、第一确定单元302、转换单元303、生成单元304和第一编译单元305,如下:
(1)接收单元301;
接收单元301,用于接收终端上传的原始程序文件,并对该原始程序文件的类型进行识别。
(2)第一确定单元302;
第一确定单元302,用于当识别到该原始程序文件的类型为接口代码文件类型时,确定该原始程序文件在终端***中对应的接口编译版本。
(3)转换单元303;
转换单元303,用于基于该接口代码文件类型,将该原始程序文件转换成目标语法结构的目标程序文件。
在一实施例中,该转换单元303,包括:
切割子单元3031,用于基于该接口代码文件类型,将该原始程序文件按照预设规则进行切割,得到切割后的数组;
转换子单元3032,用于将该数组转换成目标语法结构的目标程序文件。
(4)生成单元304;
生成单元304,用于基于该目标程序文件,生成待编译程序文件。
在一实施例中,该生成单元304,包括:
解析子单元3041,用于对该目标程序文件进行解析,得到解析后的属性数据信息;
整合子单元3042,用于对该属性数据信息进行整合,生成待编译程序文件。
在一实施例中,该整合子单元3042还用于获取该解析后的属性数据信息对应的骨架代码;将该属性数据信息和该骨架代码进行合并,生成待编译程序文件。
(5)第一编译单元305;
第一编译单元305,用于基于该接口编译版本,对该待编译程序文件进行编译,得到编译后程序文件。
在一实施例中,该第一编译单元305,包括:
第一接收子单元3051,用于接收编译指令;
设置子单元3052,用于基于该接口编译版本,设置临时编译环境参数,得到临时编译环境参数;
编译子单元3053,用于根据该编译指令和该临时编译环境参数,对该待编译程序文件进行编译,得到编译后程序文件。
在一实施例中,该编译子单元3053,还包括:
检测子单元3054,用于对该编译后程序文件的状态进行检测,得到检测结果;
第二接收子单元3055,用于接收终端发送的编译后程序文件获取请求;
发送子单元3056,用于基于该检测结果和该编译后程序文件获取请求,将该编译后程序文件发送到该终端。
在一实施例中,如图12所示,该程序文件的编译装置还包括:
第二确定单元306,用于当该原始程序文件的类型为扩展程序类型时,确定该原始程序文件在终端***中对应的扩展编译版本;
第二编译单元307,用于基于该扩展编译版本,对该原始程序文件进行编译,得到编译后的扩展程序文件。
由以上可知,本申请实施例的程序文件的编译装置中接收单元301接收终端上传的原始程序文件,并对该原始程序文件的类型进行识别;然后第一确定单元302当识别到该原始程序文件的类型为接口代码文件类型时,确定该原始程序文件在终端***中对应的接口编译版本;由转换单元303基于该接口代码文件类型,将该原始程序文件转换成目标语法结构的目标程序文件;由生成单元304基于该目标程序文件,生成待编译程序文件;由第一编译单元305基于该接口编译版本,对该待编译程序文件进行编译,得到编译后程序文件。该方案可以通过识别上传的原始程序文件的类型来确定程序编译的版本,然后可以对待编译的程序文件进行编译,可以不用搭建一套编译环境,程序文件编译的效率高。
此外,本申请实施例还提供一种计算机设备,该计算机设备可以为服务器或者终端等设备,如图13所示,其示出了本申请实施例所涉及的计算机设备的结构示意图,具体来讲:
该计算机设备可以包括一个或者一个以上处理核心的处理器401、一个或一个以上计算机可读存储介质的存储器402、电源403和输入单元404等部件。本领域技术人员可以理解,图13中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器401是该计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储器402内的软件程序和/或模块,以及调用存储在存储器402内的数据,执行计算机设备的各种功能和处理数据,从而对计算机设备进行整体监控。可选的,处理器401可包括一个或多个处理核心;优选的,处理器401可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作***、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器401中。
存储器402可用于存储软件程序以及模块,处理器401通过运行存储在存储器402的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器402可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作***、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器402可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器402还可以包括存储器控制器,以提供处理器401对存储器402的访问。
计算机设备还包括给各个部件供电的电源403,优选的,电源403可以通过电源管理***与处理器401逻辑相连,从而通过电源管理***实现管理充电、放电、以及功耗管理等功能。电源403还可以包括一个或一个以上的直流或交流电源、再充电***、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该计算机设备还可包括输入单元404,该输入单元404可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,计算机设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,计算机设备中的处理器401会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器402中,并由处理器401来运行存储在存储器402中的应用程序,从而实现各种功能,如下:
接收终端上传的原始程序文件,并对该原始程序文件的类型进行识别;当识别到该原始程序文件的类型为接口代码文件类型时,确定该原始程序文件在终端***中对应的接口编译版本;基于该接口代码文件类型,将该原始程序文件转换成目标语法结构的目标程序文件;基于该目标程序文件,生成待编译程序文件;基于该接口编译版本,对该待编译程序文件进行编译,得到编译后程序文件。
以上个操作的具体实施例可参见前面的实施例,在此不再赘述。
在一实施例中,如图9所示,该计算机设备可以是分布式***中的一个节点,其中,该分布式***可以为区块链***,该区块链***可以是由多个节点通过网络通信的形式连接形成的分布式***。其中,节点之间可以组成点对点(P2P,Peer To Peer)网络,任意形式的计算机设备,比如服务器、终端等电子设备都可以通过加入该点对点网络而成为该区块链***中的一个节点。
由以上可知,本实施例可以通过识别上传的原始程序文件的类型来确定程序编译的版本,然后可以对待编译的程序文件进行编译,可以不用搭建一套编译环境,程序文件编译的效率高。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种程序文件的编译方法中的步骤。例如,该指令可以执行如下步骤:
接收终端上传的原始程序文件,并对该原始程序文件的类型进行识别;当识别到该原始程序文件的类型为接口代码文件类型时,确定该原始程序文件在终端***中对应的接口编译版本;基于该接口代码文件类型,将该原始程序文件转换成目标语法结构的目标程序文件;基于该目标程序文件,生成待编译程序文件;基于该接口编译版本,对该待编译程序文件进行编译,得到编译后程序文件。
以上各个操作的具体实施方式可参见前面的实施例,在此不再赘述。
其中,该存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该存储介质中所存储的指令,可以执行本申请实施例所提供的任一种程序文件的编译方法中的步骤,因此,可以实现本申请实施例所提供的任一种程序文件的编译方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种程序文件的编译方法、装置和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

Claims (10)

1.一种程序文件的编译方法,其特征在于,包括:
接收终端上传的原始程序文件,并对所述原始程序文件的类型进行识别;
当识别到所述原始程序文件的类型为接口代码文件类型时,确定所述原始程序文件在终端***中对应的接口编译版本;
基于所述接口代码文件类型,将所述原始程序文件转换成目标语法结构的目标程序文件;
基于所述目标程序文件,生成待编译程序文件;
接收编译指令;
基于所述接口编译版本,设置临时编译环境参数,得到临时编译环境参数;
根据所述编译指令和所述临时编译环境参数,对所述待编译程序文件进行编译,得到编译后程序文件。
2.根据权利要求1所述的方法,其特征在于,基于所述目标程序文件,生成待编译程序文件,包括:
对所述目标程序文件进行解析,得到解析后的属性数据信息;
对所述属性数据信息进行整合,生成待编译程序文件。
3.根据权利要求2所述的方法,其特征在于,对所述属性数据信息进行整合,生成待编译程序文件,包括:
获取所述解析后的属性数据信息对应的骨架代码;
将所述属性数据信息和所述骨架代码进行合并,生成待编译程序文件。
4.根据权利要求1所述的方法,其特征在于,基于所述接口代码文件类型,将所述原始程序文件转换成目标语法结构的目标程序文件,包括:
基于所述接口代码文件类型,将所述原始程序文件按照预设规则进行切割,得到切割后的数组;
将所述数组转换成目标语法结构的目标程序文件。
5.根据权利要求1所述的方法,其特征在于,根据所述编译指令和所述临时编译环境参数,对所述待编译程序文件进行编译,得到编译后程序文件之后,所述方法还包括:
对所述编译后程序文件的状态进行检测,得到检测结果;
接收终端发送的编译后程序文件获取请求;
基于所述检测结果和所述编译后程序文件获取请求,将所述编译后程序文件发送到所述终端。
6.根据权利要求1所述的方法,其特征在于,对所述原始程序文件的类型进行识别之后,所述方法还包括:
当所述原始程序文件的类型为扩展程序类型时,确定所述原始程序文件在终端***中对应的扩展编译版本;
基于所述扩展编译版本,对所述原始程序文件进行编译,得到编译后的扩展程序文件。
7.根据权利要求1所述的方法,其特征在于,所述方法还包括:
将所述编译后程序文件存储至区块链中。
8.一种程序文件的编译装置,其特征在于,包括:
接收单元,用于接收终端上传的原始程序文件,并对所述原始程序文件的类型进行识别;
第一确定单元,用于当识别到所述原始程序文件的类型为接口代码文件类型时,确定所述原始程序文件在终端***中对应的接口编译版本;
转换单元,用于基于所述接口代码文件类型,将所述原始程序文件转换成目标语法结构的目标程序文件;
生成单元,用于基于所述目标程序文件,生成待编译程序文件;
第一编译单元,用于接收编译指令;基于所述接口编译版本,设置临时编译环境参数,得到临时编译环境参数;根据所述编译指令和所述临时编译环境参数,对所述待编译程序文件进行编译,得到编译后程序文件。
9.一种计算机可读存储介质,其特征在于,所述存储介质存储有多条指令,所述指令适于处理器进行加载,以执行权利要求1至7任一项所述的程序文件的编译方法中的步骤。
10.一种计算机设备,包括存储器,处理器及存储在储存器上并可在处理器上运行的计算机程序,其中,所述处理器执行权利要求1至7任一项提供的程序文件的编译方法中的步骤。
CN202010008323.0A 2020-01-06 2020-01-06 程序文件的编译方法、装置和计算机可读存储介质 Active CN111209005B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010008323.0A CN111209005B (zh) 2020-01-06 2020-01-06 程序文件的编译方法、装置和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010008323.0A CN111209005B (zh) 2020-01-06 2020-01-06 程序文件的编译方法、装置和计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN111209005A CN111209005A (zh) 2020-05-29
CN111209005B true CN111209005B (zh) 2021-07-23

Family

ID=70789454

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010008323.0A Active CN111209005B (zh) 2020-01-06 2020-01-06 程序文件的编译方法、装置和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN111209005B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112269565A (zh) * 2020-10-30 2021-01-26 杭州电子科技大学 基于容器的边缘设备运行方法、装置和***
CN112506519A (zh) * 2020-12-15 2021-03-16 Oppo广东移动通信有限公司 应用程序的编译方法、移动终端及服务器
CN112596751B (zh) * 2020-12-29 2024-05-17 Oppo广东移动通信有限公司 应用程序安装包的编译方法、终端、服务器及存储介质
CN112650502A (zh) * 2020-12-31 2021-04-13 广州方硅信息技术有限公司 批处理任务处理方法、装置、计算机设备和存储介质
CN112822193B (zh) * 2021-01-05 2023-03-24 网易(杭州)网络有限公司 应用通信方法、装置、设备及存储介质
CN112882718B (zh) * 2021-02-26 2024-03-01 百果园技术(新加坡)有限公司 编译处理方法、装置、设备及存储介质
CN113127001B (zh) * 2021-04-28 2024-03-08 上海米哈游璃月科技有限公司 一种代码编译过程监控方法、装置、设备和介质
CN113110873A (zh) * 2021-05-10 2021-07-13 中国建设银行股份有限公司 统一***编码规范的方法和装置
CN113742008B (zh) * 2021-09-13 2024-04-02 挂号网(杭州)科技有限公司 接口调用方法、装置、电子设备及存储介质
CN116069304B (zh) * 2023-04-06 2023-07-14 紫光同芯微电子有限公司 一种程序数据生成方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101216776A (zh) * 2008-01-15 2008-07-09 中兴通讯股份有限公司 一种自动创建编译环境的方法及***
CN105700934A (zh) * 2016-02-19 2016-06-22 陕西瑞亚智能技术有限公司 一种智能编译方法和智能编译***
CN107766048A (zh) * 2017-10-23 2018-03-06 山东浪潮通软信息科技有限公司 一种页面编译方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8930925B2 (en) * 2009-10-20 2015-01-06 Russell WAYNE Guenthner Method for enabling compilation of a Cobol source program utilizing a two-stage compilation process, the Cobol source program including a mix of Cobol, C++ or JAVA statements, and optional OpenMP directives
US10417314B2 (en) * 2012-06-14 2019-09-17 Open Text Sa Ulc Systems and methods of a script generation engine
CN109976748A (zh) * 2019-02-28 2019-07-05 南京南瑞继保电气有限公司 一种程序处理方法、终端、服务器及计算机存储介质
CN109918081B (zh) * 2019-03-01 2022-06-03 中安智联未来有限公司 一种编译方法及编译器

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101216776A (zh) * 2008-01-15 2008-07-09 中兴通讯股份有限公司 一种自动创建编译环境的方法及***
CN105700934A (zh) * 2016-02-19 2016-06-22 陕西瑞亚智能技术有限公司 一种智能编译方法和智能编译***
CN107766048A (zh) * 2017-10-23 2018-03-06 山东浪潮通软信息科技有限公司 一种页面编译方法及装置

Also Published As

Publication number Publication date
CN111209005A (zh) 2020-05-29

Similar Documents

Publication Publication Date Title
CN111209005B (zh) 程序文件的编译方法、装置和计算机可读存储介质
CN106547527B (zh) 一种JavaScript文件构建方法及装置
US20060265469A1 (en) XML based scripting framework, and methods of providing automated interactions with remote systems
JP2018530070A (ja) クラウドベースのコンピューティング環境上の基盤を構築、最適化及び実施するシステム及び方法
EP2510433B1 (en) Canonicalized versions of reuse candidates in graphical state diagrams
CN111399840B (zh) 一种模块开发方法及装置
CN110673923A (zh) Xwiki***配置方法、***及计算机设备
CN114077534B (zh) 测试用例生成方法、装置和计算机可读存储介质
CN112035443B (zh) 基于Linux平台的大数据执行方法、***、设备及存储介质
CN110362792B (zh) 将rn文件转换为小程序文件的方法、装置及转换设备
CN111767217A (zh) Js单元测试案例生成方法及装置
US10810022B2 (en) Executable configuration template language
WO2015003452A1 (en) Methods and systems for file processing
CN110362317B (zh) 一种代码转换方法、装置和存储介质
CN113297081B (zh) 一种持续集成流水线的执行方法和装置
CN109388406A (zh) 转换java代码的方法及装置、存储介质、电子装置
CN113360156B (zh) 一种ios编译方法及相关设备
CN112328241B (zh) 一种应用程序开发中创建Android库模块依赖关系的方法及装置
CN115202663A (zh) 一种数据处理方法、装置和存储介质
CN113377342B (zh) 一种项目构建方法、装置、电子设备及存储介质
CN113515303A (zh) 一种项目转型方法、装置和设备
CN117008920A (zh) 引擎***、请求处理方法、装置、计算机设备及存储介质
CN115794253A (zh) 应用集成方法、装置、电子设备及计算机可读存储介质
CN112148392A (zh) 一种函数调用链获取方法、装置及存储介质
CN115390846A (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