【技术实现步骤摘要】
一种动态化编译的方法、装置、设备和存储介质
[0001]本公开涉及计算机术领域,尤其涉及互联网和移动应用的研发和运维领域。
技术介绍
[0002]随着flutter技术越来越成熟,在线实时更新或热修复的技术逐渐在一些应用(app)上落地,比如基于运行时解析领域特定语言(Domain Specific Language,DSL)产物的flutter动态化编译的方法。
[0003]DSL也是一种计算机编程语言具有语言表达能力,但与Java、C和Python等通用编程语言(General Purpose Language,GPL)不同,DSL关注于某个特定领域,表达能力比较有限,例如,显示网页的HTML、用于数据库处理的SQL、用于检索或者替换文本的正则表达式,用于自动化构建的Gradle等。
[0004]目前,业界常用的动态化编译的方法是依据各自的需要及动态解析能力来制定DSL规范,最终将Dart源码编译成DSL产物,再由运行引擎将DSL产物实时转化为页面显示内容,但这一过程非常复且效率较低。
专利技术内 ...
【技术保护点】
【技术特征摘要】
1.一种动态化编译的方法,包括:获取至少一个源文件;使用DSL规范,解析所述至少一个源文件中的每一源文件,确定所述至少一个源文件的DSL语法树,得到至少一个第一目标文件,所述DSL语法树中的每一个节点代表一个程序对象;根据所述DSL语法树,确定各节点所代表的程序对象的声明类型和调用顺序;根据所述声明类型和所述调用顺序,确定所述声明类型的加载顺序,得到第二目标文件。2.根据权利要求1所述的方法,其中,所述使用DSL规范,解析所述至少一个源文件中的每一源文件,确定所述至少一个源文件的DSL语法树,包括:使用分词工具和自定义的DSL规范,解析所述至少一个源文件中的每一源文件,确定所述至少一个源文件的DSL语法树。3.根据权利要求2所述的方法,还包括:根据所述源文件所使用的编程语言的语法表达式,定义DSL规范,得到所述自定义的DSL规范。4.根据权利要求3所述的方法,其中,所述源文件所使用的编程语言包括至少一种编程语言。5.根据权利要求3所述的方法,还包括:针对所述源文件所使用的编程语言的特定表达式,定义所述特定表达式的转换规则。6.根据权利要求1所述的方法,其中,所述使用DSL规范,解析所述至少一个源文件中的每一源文件,确定所述至少一个源文件的DSL语法树,得到至少一个第一目标文件,包括:使用DSL规范,解析所述至少一个源文件中的每一源文件,确定所述每一文件的DSL语法树,得到所述每一源文件的第三目标文件或第一目标文件;其中,若所述至少一个源文件中的第一源文件与第二源文件关联,则生成第三目标文件,否则生成第一目标文件;将所述第一源文件的第三目标文件合并至所述第二源文件的第一目标文件。7.根据权利要求1所述的方法,其中,所述根据所述DSL语法树,确定各节点所代表的程序对象的声明类型和调用顺序,包括:根据所述DSL语法树确定节点信息,得到节点信息的集合,所述节点包括内部节点和外部节点,所述节点信息包括相应节点的标识和类型,所述节点的类型包括类、顶级变量、顶级函数和枚举;根据所述节点的标识,确定所述节点所代表的程序对象的声明类型;根据所述DSL语法树中各节点之间的路径信息,确定各节点所代表的程序对象的调用顺序。8.根据权利要求7所述的方法,其中,所述根据所述DSL语法树确定节点信息,得到节点信息的集合,包括:将属于第一源文件的节点信息加入到所述第一源文件的节点信息的集合;若所述第一源文件包含第二源文件中的程序对象,则将所述第二源文件中的程序对象的节点信息,加入到所述第二源文件的节点信息的集合。
9.根据权利要求1所述的方法,其中,根据所述声明类型和所述调用顺序,确定所述声明类型的加载顺序,得到第二目标文件,包括:按照大小,对所述节点信息的集合进行从小到大的第一排序,得到第一排序后的节点信息的集合;根据所述声明类型,对所述排序后的节点信息的集合进行分类,得到至少一个声明类型对应的第二排序后的节点信息的集合;按所述调用顺序排序,对每一声明类型对应的排序后的节点信息的集合进行第二排序,得到第二排序后的节点信息的集合;记录所述第二排序后的节点信息的集合,得到第二目标文件。10.根据权利要求1所述的方法,还包括:根据所述第二目标文件,顺序加载所述第二目标文件中的声明类型;将所述...
【专利技术属性】
技术研发人员:李俊蓉,高飞,
申请(专利权)人:北京百度网讯科技有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。