本公开提供了一种代码解析的方法、装置、电子设备及存储介质,其中,该方法包括:获取前端中待解析的源代码;检测源代码中是否存在非纯函数元素,并在确定存在非纯函数元素的情况下,获取非纯函数元素在源代码中的位置信息;基于位置信息将源代码划分为非纯函数语段和纯函数语段;利用前端对划分后的非纯函数语段进行处理,以及利用终端对划分后的纯函数语段进行处理。本公开可以基于非纯函数元素进行语段的划分,这使得有关源代码中的纯函数语段依然是可以在终端运行的,整体的计算性能更佳。
【技术实现步骤摘要】
一种代码解析的方法、装置、电子设备及存储介质
本公开涉及深度学习
,具体而言,涉及一种代码解析的方法、装置、电子设备及存储介质。
技术介绍
目前,深度学习网络广泛应用在各个领域,基于深度学习网络的各种深度学习框架和终端也越来越多。这里的深度学习框架包括TensorFlow、MXNet、Keras和PyTorch等,这里的终端包括中央处理器(CentralProcessingUnit,CPU)、图形处理器(GraphicsProcessingUnit,GPU)等深度学习处理器。为了适应不同端的应用需求,上述深度学习框架和终端之间所采用的编程语言往往不同,因此一款支持前端各种深度学习框架和终端各种终端的编译器显得尤为重要。现有的深度学习编译器可以将算法研究员编写的高层次语言代码(例如Python)自动生成为终端代码(例如CUDA)来提高计算执行性能。然而对于非纯函数而言,由于其具有的特殊性,深度学习编译器无法处理,这将导致包含非纯函数的所有源代码均无法完成编译,这使得终端的计算性能大大减低。
技术实现思路
本公开实施例至少提供一种代码解析的方法、装置、电子设备及存储介质。第一方面,本公开实施例提供了一种代码解析的方法,所述方法包括:获取前端中待解析的源代码;检测所述源代码中是否存在非纯函数元素,并在确定存在非纯函数元素的情况下,获取所述非纯函数元素在所述源代码中的位置信息;基于所述位置信息将所述源代码划分为非纯函数语段和纯函数语段;利用前端对划分后的所述非纯函数语段进行处理,以及利用终端对划分后的所述纯函数语段进行处理。这里,在获取到前端中待解析的源代码的情况下,首先检测源代码中是否存在非纯函数元素,并能够在确定存在非纯函数元素的情况下,获取非纯函数元素在源代码中的位置信息,该位置信息可以将源代码划分为非纯函数语段和纯函数语段,对于划分后的非纯函数语段可以由前端来处理,对于划分后的纯函数语段可以由终端来处理。可见,对于包含有非纯函数元素的源代码而言,本公开实施例可以基于非纯函数元素进行语段的划分,这使得有关源代码中的纯函数语段依然是可以在终端运行的,相比相关技术中由于包含有非纯函数元素而导致整个源代码无法编译进而无法在终端运行而导致计算性能较差相比,整体的计算性能更佳。在一种可能实施方式中,所述检测所述源代码中是否存在非纯函数元素,包括:将获取的所述源代码对应的字符序列进行词法分析,得到至少一个单词;对所述至少一个单词进行语法分析,得到不同单词之间的语法关系;针对所述至少一个单词中的每个单词,基于与该单词存在语法关系的关联单词,确定该单词是否为非纯函数元素。这里,可以结合词法分析和语法分析,确定与源代码对应的每个单词之间存在语法关系的关联单词,利用关联单词所指向的属性信息,即可以确定单词是否为非纯函数元素,通过源代码解析可以进一步提升后续的计算性能。在一种可能的实施方式中,所述基于与该单词存在语法关系的关联单词,确定该单词是否为非纯函数元素,包括:针对所述至少一个单词中的每个单词,在确定与该单词存在语法关系的关联单词指示该单词为非局部变量、局部静态变量、可修改的引用参数、以及输入输出流中的任一种的情况下,确定该单词为非纯函数元素。在一种可能的实施方式中,检测所述源代码中是否存在非纯函数元素,包括:对获取的前端中待解析的源代码包括的语句进行拆分处理,得到拆分处理后的源代码;检测所述拆分处理后的源代码中是否存在非纯函数元素。为了提升非纯函数元素检测的准确性,这里,可以预先对源代码包括的语句进行拆分处理,拆分处理后的源代码去除了复杂操作,以进一步定位非纯函数元素。在一种可能的实施方式中,所述对获取的前端中待解析的源代码包括的语句进行拆分处理,得到拆分处理后的源代码,包括:针对所述前端中待解析的源代码中的函数调用语句,从所述函数调用语句中拆分出函数体,将拆分出的函数体作为所述拆分处理后的源代码;和/或,针对所述前端中待解析的源代码中的目标表达式语句,对该目标表达式语句进行拆分,将得到的拆分后的多个子目标表达式语句作为所述拆分处理后的源代码。在一种可能的实施方式中,所述基于所述位置信息将所述源代码划分为非纯函数语段和纯函数语段,包括:将所述位置信息所指示位置处的语段,确定为所述非纯函数元素对应的非纯函数语段;以及,基于所述非纯函数语段,以及所述源代码,确定所述源代码中的纯函数语段。在一种可能的实施方式中,在确定存在多个所述非纯函数元素的情况下,所述基于所述非纯函数语段,以及所述源代码,确定所述源代码中的纯函数语段,包括:针对确定的所述源代码中的非纯函数语段,将位于不同的非纯函数语段之间、第一个非纯函数语段之前、以及最后一个非纯函数语段之后的语段,作为所述源代码中的纯函数语段。在一种可能的实施方式中,所述纯函数语段至少为一个;所述利用前端对划分后的所述非纯函数语段进行处理,以及利用终端对划分后的所述纯函数语段进行处理,包括:依次将至少一个所述纯函数语段进行封装,得到每个纯函数语段对应的封装语句;构造包含至少一个所述封装语句和所述非纯函数语段的复合函数;在调用所述复合函数的过程中,利用前端对所述复合函数中的所述非纯函数语段进行处理,以及利用终端调用所述复合函数中包含的每个所述封装语句,并对该封装语句指示的纯函数语段进行处理。这里,为了方便前段和终端进行相应语段的处理,这里,可以对纯函数语段进行封装,通过封装得到的封装语句和非纯函数语段所构造的复合函数,可以快速实现前端对复合函数中的非纯函数语段的处理以及终端对封装语句指示的纯函数语段的处理,进一步提升整体的计算性能。第二方面,本公开实施例还提供了一种代码解析的装置,所述装置包括:获取模块,用于获取前端中待解析的源代码;检测模块,用于检测所述源代码中是否存在非纯函数元素,并在确定存在非纯函数元素的情况下,获取所述非纯函数元素在所述源代码中的位置信息;划分模块,用于基于所述位置信息将所述源代码划分为非纯函数语段和纯函数语段;处理模块,用于利用前端对划分后的所述非纯函数语段进行处理,以及利用终端对划分后的所述纯函数语段进行处理。第三方面,本公开实施例还提供了一种电子设备,包括:处理器、存储器和总线,所述存储器存储有所述处理器可执行的机器可读指令,当电子设备运行时,所述处理器与所述存储器之间通过总线通信,所述机器可读指令被所述处理器执行时执行如第一方面及其各种实施方式任一所述的代码解析的方法的步骤。第四方面,本公开实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行如第一方面及其各种实施方式任一所述的代码解析的方法的步骤。关于上述代码解析的装置、电子设备、及计算机可读存储介质的效果描述参见上述代码解析的方法的说明,这里不再赘述。<本文档来自技高网...
【技术保护点】
1.一种代码解析的方法,其特征在于,所述方法包括:/n获取前端中待解析的源代码;/n检测所述源代码中是否存在非纯函数元素,并在确定存在非纯函数元素的情况下,获取所述非纯函数元素在所述源代码中的位置信息;/n基于所述位置信息将所述源代码划分为非纯函数语段和纯函数语段;/n利用前端对划分后的所述非纯函数语段进行处理,以及利用终端对划分后的所述纯函数语段进行处理。/n
【技术特征摘要】
1.一种代码解析的方法,其特征在于,所述方法包括:
获取前端中待解析的源代码;
检测所述源代码中是否存在非纯函数元素,并在确定存在非纯函数元素的情况下,获取所述非纯函数元素在所述源代码中的位置信息;
基于所述位置信息将所述源代码划分为非纯函数语段和纯函数语段;
利用前端对划分后的所述非纯函数语段进行处理,以及利用终端对划分后的所述纯函数语段进行处理。
2.根据权利要求1所述的方法,其特征在于,所述检测所述源代码中是否存在非纯函数元素,包括:
将获取的所述源代码对应的字符序列进行词法分析,得到至少一个单词;
对所述至少一个单词进行语法分析,得到不同单词之间的语法关系;
针对所述至少一个单词中的每个单词,基于与该单词存在语法关系的关联单词,确定该单词是否为非纯函数元素。
3.根据权利要求2所述的方法,其特征在于,所述基于与该单词存在语法关系的关联单词,确定该单词是否为非纯函数元素,包括:
针对所述至少一个单词中的每个单词,在确定与该单词存在语法关系的关联单词指示该单词为非局部变量、局部静态变量、可修改的引用参数、以及输入输出流中的任一种的情况下,确定该单词为非纯函数元素。
4.根据权利要求1-3任一所述的方法,其特征在于,检测所述源代码中是否存在非纯函数元素,包括:
对获取的前端中待解析的源代码包括的语句进行拆分处理,得到拆分处理后的源代码;
检测所述拆分处理后的源代码中是否存在非纯函数元素。
5.根据权利要求4所述的方法,其特征在于,所述对获取的前端中待解析的源代码包括的语句进行拆分处理,得到拆分处理后的源代码,包括:
针对所述前端中待解析的源代码中的函数调用语句,从所述函数调用语句中拆分出函数体,将拆分出的函数体作为所述拆分处理后的源代码;和/或,
针对所述前端中待解析的源代码中的目标表达式语句,对该目标表达式语句进行拆分,将得到的拆分后的多个子目标表达式语句作为所述拆分处理后的源代码。
6.根据权利要求1-5任一所述的方法,其特征在于,所述基于所述位置信息将所述源代码划分为非纯函数语段和纯函数语段,包括:
将所述位置信...
【专利技术属性】
技术研发人员:李秀红,陈仁泽,李懋林,颜深根,
申请(专利权)人:上海商汤智能科技有限公司,
类型:发明
国别省市:上海;31
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。