转换代码语法的方法、装置和计算机设备
技术领域
本申请涉及大数据领域,特别是涉及到转换代码语法的方法、装置和计算机设备。
背景技术
目前前端js代码在项目开发过程中,常常会遇到多层对象嵌套取值的问题,这类对象往往是服务端返回给前端的,有可能存在返回对象嵌套内容缺失的情况,如果前端不做非空校验处理,直接取值,就会导致代码报错,直接导致整个页面逻辑阻碍,影响其他代码逻辑的正常执行。
目前非空校验判断,从对象中所取值的字段进行每一层的非空校验判断,直到校验都通过,才会进行取值。这样会增加很多代码量,且影响可阅读性。虽然ECMAScript 2020规范的可选链操作符语法,可实现代码简化,方便对多层对象嵌套快速取值,但现没有对代码进行可选链操作符语法的统一转换工具,导致多层对象嵌套取值的问题依然不能得到快速解决。
发明内容
本申请的主要目的为提供转换代码语法的,旨在解决现有不能快速获取多层对象嵌套取值的技术问题。
本申请提出一种转换代码语法的方法,包括:
判断指定代码语句中是否存在判空操作符,其中,所述指定代码语句为待语法转换文件中的任一代码语句;
若存在判空操作符,则判断位于所述判空操作符之前的第一代码取值,是否包含位于所述判空操作符之后的第二代码取值;
若是,则将所述第一代码取值、所述判空操作符以及所述第二代码取值,定义为连续套嵌取值代码块;
执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句。
优选地,所述执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句,包括:
启动所述可选链操作符语法工具;
根据所述连续套嵌取值代码块,定位截取进行语法转换的代码表达式;
将所述代码表达式输入所述可选链操作符语法工具,在指定位置添加可选链操作符,得到所述连续套嵌取值代码块对应的可选链操作符语法的代码语句。
优选地,所述根据所述连续套嵌取值代码块,定位截取进行语法转换的代码表达式,包括:
判断所述连续套嵌取值代码块是否存在于条件语句中;
若存在于条件语句中,则判断所述条件语句对应的条件值语句中是否包括比较操作符;
若不包括比较操作符,则将所述条件语句对应的条件值语句,作为所述代码表达式。
优选地,所述判断所述连续套嵌取值代码块是否存在于条件语句中之后,包括:
若不存在于条件语句中,判断所述连续套嵌取值代码块中,是否包括两个或两个以上的判空操作符;
若是,则定位所述连续套嵌取值代码块中排布在最后的指定判空操作符;
截取所述指定判空操作符之后的代码字符串,作为所述代码表达式。
优选地,所述将所述代码表达式输入所述可选链操作符语法工具,在指定位置添加可选链操作符,得到所述连续套嵌取值代码块对应的可选链操作符语法的代码语句之后,包括:
判断是否存在已安装的兼容工具;
若否,则在系统终端的命令行导入第一指令,下载所述兼容工具对应的可选链操作符转译包;
判断是否已下载完毕;
若是,则在系统终端的命令行导入第二指令,安装所述兼容工具。
优选地,所述判断指定代码语句中是否存在判空操作符之前,包括:
获取所述可选链操作符语法工具的配置文件;
读取所述配置文件中的文件地址;
遍历所述文件地址对应的所有文件,确定需要进行所述待语法转换文件。
本申请还提供了一种转换代码语法的装置,包括:
第一判断模块,用于判断指定代码语句中是否存在判空操作符,其中,所述指定代码语句为待语法转换文件中的任一代码语句;
第二判断模块,用于若存在判空操作符,则判断位于所述判空操作符之前的第一代码取值,是否包含位于所述判空操作符之后的第二代码取值;
定义模块,用于若位于所述判空操作符之前的第一代码取值,包含位于所述判空操作符之后的第二代码取值,则将所述第一代码取值、所述判空操作符以及所述第二代码取值,定义为连续套嵌取值代码块;
转换模块,用于执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句。
本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法。
本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法。
本申请通过设计自动检测逻辑定位符合语法转换的代码语句,并自动调用可选链操作符语法的转换,实现代码语法的自动转换,便于获取连续套嵌取值代码块的最内层赋值,解决多层对象嵌套取值的问题。
附图说明
图1本申请一实施例的转换代码语法的方法流程示意图;
图2本申请一实施例的转换代码语法的系统流程示意图;
图3本申请一实施例的计算机设备内部结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
参照图1,本申请一实施例的转换代码语法的方法,包括:
S1:判断指定代码语句中是否存在判空操作符,其中,所述指定代码语句为待语法转换文件中的任一代码语句;
S2:若存在判空操作符,则判断位于所述判空操作符之前的第一代码取值,是否包含位于所述判空操作符之后的第二代码取值;
S3:若是,则将所述第一代码取值、所述判空操作符以及所述第二代码取值,定义为连续套嵌取值代码块;
S4:执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句。
本申请实施例中,上述判空操作符包括但不限于“&&”,通过&&判空操作符左边的代码取值,与&&判空操作符右边的代码取值进行比较,根据它们取值范围的包含关系,判断是否为需要语法转换的连续套嵌取值代码块。若&&判空操作符的左边代码取值,包含&&判空操作符的右边代码取值,则为连续套嵌取值代码块。举例地,obj.a&&obj.a.b&&obj.a.b.c中,obj.a.b包含于obj.a中,obj.a.b.c包含于obj.a和obj.a.b中,则为连续嵌套取值的代码结构,则obj.a&&obj.a.b&&obj.a.b.c为连续套嵌取值代码块,符合语法转换要求,则会自动触发语法转换,便于获取连续套嵌取值代码块的最内层赋值。若上述连续套嵌取值代码块中包括多个&&判空操作符,则为多层的连续套嵌取值代码块。
本申请通过设计自动检测逻辑定位符合语法转换的代码语句,并自动调用可选链操作符语法的转换,实现代码语法的自动转换,便于获取连续套嵌取值代码块的最内层赋值,解决多层对象嵌套取值的问题。
进一步地,所述执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句S4,包括:
S41:启动所述可选链操作符语法工具;
S42:根据所述连续套嵌取值代码块,定位截取进行语法转换的代码表达式;
S43:将所述代码表达式输入所述可选链操作符语法工具,在指定位置添加可选链操作符,得到所述连续套嵌取值代码块对应的可选链操作符语法的代码语句。
本申请实施例的可选链操作符语法工具为根据语法转换前后的语法差异性得到的代码逻辑,在mac系统终端的命令行,定位当前项目的根目录,执行构建命令:npm runpa-auto-optional-chaining-operator,执行完成后,会将符合要求代码直接转换为可选链操作符语法的代码语句。可选链操作符语法工具通过定位截取进行语法转换的代码表达式,并在代码表达式的指定位置添加可选链操作符“?”,实现语法转换。然后将添加了可选链操作符“?”的代码表达式,作为连续套嵌取值代码块对应的可选链操作符语法的代码语句,并予以替换。举例地,代码表达式为obj.a.b.c,在上述代码表达式的每一个“.”前面加上“?”,最终得到obj?.a?.b?.c。
进一步地,根据所述连续套嵌取值代码块,定位截取进行语法转换的代码表达式S42,包括:
S421:判断所述连续套嵌取值代码块是否存在于条件语句中;
S422:若存在于条件语句中,则判断所述条件语句对应的条件值语句中是否包括比较操作符;
S423:若不包括比较操作符,则将所述条件语句对应的条件值语句,作为所述代码表达式。
本申请实施例中,如果连续套嵌取值代码块存在于条件语句中,即作为if语句中的条件,且只对条件作了判空处理,没有对条件语句对应的条件值通过比较操作符进行比较操作,则可以直接取出if语句对应的条件值语句,作为代码表达式进行语法转换后,并替换整个条件语句和条件语句对应的条件值。上述比较操作符包括但不限于“==,!=,>,<,”。举例地,条件语句和条件语句对应的条件值为:if(obj.a&&obj.a.b&&obj.a.b.c){window.c=obj.a.b.c},则通过语法转换可以直接简化为window.c=obj?.a?.b?.c。
本申请其他实施例中,若连续套嵌取值代码块存在于条件语句中,且对条件语句对应的条件值通过比较操作符进行了比较操作,则判定不符合语法转换的要求,不进行语法转换。
进一步地,所述判断所述连续套嵌取值代码块是否存在于条件语句中S421之后,包括:
S4211:若不存在于条件语句中,判断所述连续套嵌取值代码块中,是否包括两个或两个以上的判空操作符;
S4212:若是,则定位所述连续套嵌取值代码块中排布在最后的指定判空操作符;
S4213:截取所述指定判空操作符之后的代码字符串,作为所述代码表达式。
本申请实施例中,对于不存在于条件语句的连续套嵌取值代码块的语法转换进行了举例说明。为了便于获取连续套嵌取值代码块中最内层套嵌层的赋值,直接定位连续套嵌取值代码块中排布在最后的一个判空操作符,并截取最后一个判空操作符之后的代码字符串,作为代码表达式。举例地,对于连续套嵌取值代码块obj.a&&obj.a.b&&obj.a.b.c,直接截取obj.a.b.c作为代码表达式,并进行语法转换,转换为obj?.a?.b?.c,以替换obj.a&&obj.a.b&&obj.a.b.c,减少代码量,方便获取连续套嵌取值代码块最内层的赋值。
进一步地,所述将所述代码表达式输入所述可选链操作符语法工具,在指定位置添加可选链操作符,得到所述连续套嵌取值代码块对应的可选链操作符语法的代码语句S43之后,包括:
S431:判断是否存在已安装的兼容工具;
S432:若否,则在系统终端的命令行导入第一指令,下载所述兼容工具对应的可选链操作符转译包;
S433:判断是否已下载完毕;
S434:若是,则在系统终端的命令行导入第二指令,安装所述兼容工具。
本申请实施例在语法转换后会借助ECMAScript 2020代码的兼容工具实现浏览器的兼容性,以保障语法转换后的代码可在各浏览器上顺利执行。本申请的ECMAScript 2020代码的兼容工具在现有开源代码的基础上配置了Babel,以适用于各种版本浏览器中的代码语法转换后的任务运行。检查项目文件中的package.json文件中,是否包含Babel相关的转换代码仓库,如果没有,则执行以下命令进行babel相关代码库的安装。第二指令包括:npminstall--save-dev@babel/core@7.0.0,用于安装babel的核心代码库,本申请要求版本为大于7.0版本;以及指令:npm installbabel-plugin-proposal-optional-chaining-save-dev,用于安装ECMAScript 2020代码的兼容工具。
进一步地,判断指定代码语句中是否存在判空操作符S1之前,包括:
S11:获取所述可选链操作符语法工具的配置文件;
S12:读取所述配置文件中的文件地址;
S13:遍历所述文件地址对应的所有文件,确定需要进行所述待语法转换文件。
本申请实施例的可选链操作符语法工具引入流程简易,mac系统终端的命令行,定位当前项目的根目录,执行可选链操作符语法工具引入命令:npm ipa-auto-optional-chaining-operator-save-dev,就可以添加可选链操作符语法工具到当前项目框架中,且默认自动加入并下载相关需要的依赖文件,包括但不限于package.json文件,用于配置可选链操作符语法工具的代码库,根据npm包管理机制通过执行npm install就可以下载。
上述配置文件包括但不限于config.json。配置文件的配置内容为需要语法转换的项目文件的文件地址,包括文件夹地址。如果设置为文件夹地址,则会查找该文件夹下所有的js格式文件,作为待语法转换文件。如果文件地址为某一文件的具体地址,则将该文件作为待语法转换文件。如果配置内容中未配置,即配置内容中无文件地址或文件内容为空,则会默认将当前项目的根目录作为查找目录。
本申请的代码语法转换流程部署于区块链,转换过程的的数据存储于区块链。区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层。
区块链底层平台可以包括用户管理、基础服务、智能合约以及运营监控等处理模块。其中,用户管理模块负责所有区块链参与者的身份信息管理,包括维护公私钥生成(账户管理)、密钥管理以及用户真实身份和区块链地址对应关系维护(权限管理)等,并且在授权的情况下,监管和审计某些真实身份的交易情况,提供风险控制的规则配置(风控审计);基础服务模块部署在所有区块链节点设备上,用来验证业务请求的有效性,并对有效请求完成共识后记录到存储上,对于一个新的业务请求,基础服务先对接口适配解析和鉴权处理(接口适配),然后通过共识算法将业务信息加密(共识管理),在加密之后完整一致的传输至共享账本上(网络通信),并进行记录存储;智能合约模块负责合约的注册发行以及合约触发和合约执行,开发人员可以通过某种编程语言定义合约逻辑,发布到区块链上(合约注册),根据合约条款的逻辑,调用密钥或者其它的事件触发执行,完成合约逻辑,同时还提供对合约升级注销的功能;运营监控模块主要负责产品发布过程中的部署、配置的修改、合约设置、云适配以及产品运行中的实时状态的可视化输出,例如:告警、监控网络情况、监控节点设备健康状态等。
参照图2,本申请一实施例的转换代码语法的装置,包括:
第一判断模块1,用于判断指定代码语句中是否存在判空操作符,其中,所述指定代码语句为待语法转换文件中的任一代码语句;
第二判断模块2,用于若存在判空操作符,则判断位于所述判空操作符之前的第一代码取值,是否包含位于所述判空操作符之后的第二代码取值;
定义模块3,用于若位于所述判空操作符之前的第一代码取值,包含位于所述判空操作符之后的第二代码取值,则将所述第一代码取值、所述判空操作符以及所述第二代码取值,定义为连续套嵌取值代码块;
转换模块4,用于执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句。
本申请实施例中,上述判空操作符包括但不限于“&&”,通过&&判空操作符左边的代码取值,与&&判空操作符右边的代码取值进行比较,根据它们取值范围的包含关系,判断是否为需要语法转换的连续套嵌取值代码块。若&&判空操作符的左边代码取值,包含&&判空操作符的右边代码取值,则为连续套嵌取值代码块。举例地,obj.a&&obj.a.b&&obj.a.b.c中,obj.a.b包含于obj.a中,obj.a.b.c包含于obj.a和obj.a.b中,则为连续嵌套取值的代码结构,则obj.a&&obj.a.b&&obj.a.b.c为连续套嵌取值代码块,符合语法转换要求,则会自动触发语法转换,便于获取连续套嵌取值代码块的最内层赋值。若上述连续套嵌取值代码块中包括多个&&判空操作符,则为多层的连续套嵌取值代码块。
本申请通过设计自动检测逻辑定位符合语法转换的代码语句,并自动调用可选链操作符语法的转换,实现代码语法的自动转换,便于获取连续套嵌取值代码块的最内层赋值,解决多层对象嵌套取值的问题。
进一步地,转换模块4,包括:
启动单元,用于启动所述可选链操作符语法工具;
定位单元,用于根据所述连续套嵌取值代码块,定位截取进行语法转换的代码表达式;
添加单元,用于将所述代码表达式输入所述可选链操作符语法工具,在指定位置添加可选链操作符,得到所述连续套嵌取值代码块对应的可选链操作符语法的代码语句。
本申请实施例的可选链操作符语法工具为根据语法转换前后的语法差异性得到的代码逻辑,在mac系统终端的命令行,定位当前项目的根目录,执行构建命令:npm runpa-auto-optional-chaining-operator,执行完成后,会将符合要求代码直接转换为可选链操作符语法的代码语句。可选链操作符语法工具通过定位截取进行语法转换的代码表达式,并在代码表达式的指定位置添加可选链操作符“?”,实现语法转换。然后将添加了可选链操作符“?”的代码表达式,作为连续套嵌取值代码块对应的可选链操作符语法的代码语句,并予以替换。举例地,代码表达式为obj.a.b.c,在上述代码表达式的每一个“.”前面加上“?”,最终得到obj?.a?.b?.c。
进一步地,定位单元,包括:
第一判断子单元,用于判断所述连续套嵌取值代码块是否存在于条件语句中;
第二判断子单元,用于若存在于条件语句中,则判断所述条件语句对应的条件值语句中是否包括比较操作符;
作为子单元,用于若不包括比较操作符,则将所述条件语句对应的条件值语句,作为所述代码表达式。
本申请实施例中,如果连续套嵌取值代码块存在于条件语句中,即作为if语句中的条件,且只对条件作了判空处理,没有对条件语句对应的条件值通过比较操作符进行比较操作,则可以直接取出if语句对应的条件值语句,作为代码表达式进行语法转换后,并替换整个条件语句和条件语句对应的条件值。上述比较操作符包括但不限于“==,!=,>,<,”。举例地,条件语句和条件语句对应的条件值为:if(obj.a&&obj.a.b&&obj.a.b.c){window.c=obj.a.b.c},则通过语法转换可以直接简化为window.c=obj?.a?.b?.c。
本申请其他实施例中,若连续套嵌取值代码块存在于条件语句中,且对条件语句对应的条件值通过比较操作符进行了比较操作,则判定不符合语法转换的要求,不进行语法转换。
进一步地,定位单元,包括:
第三判断子单元,用于若不存在于条件语句中,判断所述连续套嵌取值代码块中,是否包括两个或两个以上的判空操作符;
定位子单元,用于若包括两个或两个以上的判空操作符,则定位所述连续套嵌取值代码块中排布在最后的指定判空操作符;
截取子单元,用于截取所述指定判空操作符之后的代码字符串,作为所述代码表达式。
本申请实施例中,对于不存在于条件语句的连续套嵌取值代码块的语法转换进行了举例说明。为了便于获取连续套嵌取值代码块中最内层套嵌层的赋值,直接定位连续套嵌取值代码块中排布在最后的一个判空操作符,并截取最后一个判空操作符之后的代码字符串,作为代码表达式。举例地,对于连续套嵌取值代码块obj.a&&obj.a.b&&obj.a.b.c,直接截取obj.a.b.c作为代码表达式,并进行语法转换,转换为obj?.a?.b?.c,以替换obj.a&&obj.a.b&&obj.a.b.c,减少代码量,方便获取连续套嵌取值代码块最内层的赋值。
进一步地,转换模块4,包括:
第一判断单元,用于判断是否存在已安装的兼容工具;
下载单元,用于若不存在已安装的兼容工具,则在系统终端的命令行导入第一指令,下载所述兼容工具对应的可选链操作符转译包;
第二判断单元,用于判断是否已下载完毕;
安装单元,用于若已下载完毕,则在系统终端的命令行导入第二指令,安装所述兼容工具。
本申请实施例在语法转换后会借助ECMAScript 2020代码的兼容工具实现浏览器的兼容性,以保障语法转换后的代码可在各浏览器上顺利执行。本申请的ECMAScript 2020代码的兼容工具在现有开源代码的基础上配置了Babel,以适用于各种版本浏览器中的代码语法转换后的任务运行。检查项目文件中的package.json文件中,是否包含Babel相关的转换代码仓库,如果没有,则执行以下命令进行babel相关代码库的安装。第二指令包括:npm install--save-dev@babel/core@7.0.0,用于安装babel的核心代码库,本申请要求版本为大于7.0版本;以及指令:npm installbabel-plugin-proposal-optional-chaining-save-dev,用于安装ECMAScript 2020代码的兼容工具。
进一步地,转换代码语法的装置,包括:
获取模块,用于获取所述可选链操作符语法工具的配置文件;
读取模块,用于读取所述配置文件中的文件地址;
遍历模块,用于遍历所述文件地址对应的所有文件,确定需要进行所述待语法转换文件。
本申请实施例的可选链操作符语法工具引入流程简易,mac系统终端的命令行,定位当前项目的根目录,执行可选链操作符语法工具引入命令:npm ipa-auto-optional-chaining-operator-save-dev,就可以添加可选链操作符语法工具到当前项目框架中,且默认自动加入并下载相关需要的依赖文件,包括但不限于package.json文件,用于配置可选链操作符语法工具的代码库,根据npm包管理机制通过执行npm install就可以下载。
上述配置文件包括但不限于config.json。配置文件的配置内容为需要语法转换的项目文件的文件地址,包括文件夹地址。如果设置为文件夹地址,则会查找该文件夹下所有的js格式文件,作为待语法转换文件。如果文件地址为某一文件的具体地址,则将该文件作为待语法转换文件。如果配置内容中未配置,即配置内容中无文件地址或文件内容为空,则会默认将当前项目的根目录作为查找目录。
参照图3,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储转换代码语法的过程需要的所有数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现转换代码语法的方法。
上述处理器执行上述转换代码语法的方法,包括:判断指定代码语句中是否存在判空操作符,其中,所述指定代码语句为待语法转换文件中的任一代码语句;若存在判空操作符,则判断位于所述判空操作符之前的第一代码取值,是否包含位于所述判空操作符之后的第二代码取值;若是,则将所述第一代码取值、所述判空操作符以及所述第二代码取值,定义为连续套嵌取值代码块;执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句。
上述计算机设备,通过设计自动检测逻辑定位符合语法转换的代码语句,并自动调用可选链操作符语法的转换,实现代码语法的自动转换,便于获取连续套嵌取值代码块的最内层赋值,解决多层对象嵌套取值的问题。
在一个实施例中,上述处理器执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句,包括:启动所述可选链操作符语法工具;根据所述连续套嵌取值代码块,定位截取进行语法转换的代码表达式;将所述代码表达式输入所述可选链操作符语法工具,在指定位置添加可选链操作符,得到所述连续套嵌取值代码块对应的可选链操作符语法的代码语句。
在一个实施例中,上述处理器根据所述连续套嵌取值代码块,定位截取进行语法转换的代码表达式,包括:判断所述连续套嵌取值代码块是否存在于条件语句中;若存在于条件语句中,则判断所述条件语句对应的条件值语句中是否包括比较操作符;若不包括比较操作符,则将所述条件语句对应的条件值语句,作为所述代码表达式。
在一个实施例中,上述处理器判断所述连续套嵌取值代码块是否存在于条件语句中之后,包括:若不存在于条件语句中,判断所述连续套嵌取值代码块中,是否包括两个或两个以上的判空操作符;若是,则定位所述连续套嵌取值代码块中排布在最后的指定判空操作符;截取所述指定判空操作符之后的代码字符串,作为所述代码表达式。
在一个实施例中,上述处理器将所述代码表达式输入所述可选链操作符语法工具,在指定位置添加可选链操作符,得到所述连续套嵌取值代码块对应的可选链操作符语法的代码语句之后,包括:判断是否存在已安装的兼容工具;若否,则在系统终端的命令行导入第一指令,下载所述兼容工具对应的可选链操作符转译包;判断是否已下载完毕;若是,则在系统终端的命令行导入第二指令,安装所述兼容工具。
在一个实施例中,上述处理器判断指定代码语句中是否存在判空操作符之前,包括:获取所述可选链操作符语法工具的配置文件;读取所述配置文件中的文件地址;遍历所述文件地址对应的所有文件,确定需要进行所述待语法转换文件。
本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。
本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现转换代码语法的方法,包括:判断指定代码语句中是否存在判空操作符,其中,所述指定代码语句为待语法转换文件中的任一代码语句;若存在判空操作符,则判断位于所述判空操作符之前的第一代码取值,是否包含位于所述判空操作符之后的第二代码取值;若是,则将所述第一代码取值、所述判空操作符以及所述第二代码取值,定义为连续套嵌取值代码块;执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句。
上述计算机可读存储介质,通过设计自动检测逻辑定位符合语法转换的代码语句,并自动调用可选链操作符语法的转换,实现代码语法的自动转换,便于获取连续套嵌取值代码块的最内层赋值,解决多层对象嵌套取值的问题。
在一个实施例中,上述处理器执行可选链操作符语法的转换,将所述连续套嵌取值代码块转换为可选链操作符语法对应的代码语句,包括:启动所述可选链操作符语法工具;根据所述连续套嵌取值代码块,定位截取进行语法转换的代码表达式;将所述代码表达式输入所述可选链操作符语法工具,在指定位置添加可选链操作符,得到所述连续套嵌取值代码块对应的可选链操作符语法的代码语句。
在一个实施例中,上述处理器根据所述连续套嵌取值代码块,定位截取进行语法转换的代码表达式,包括:判断所述连续套嵌取值代码块是否存在于条件语句中;若存在于条件语句中,则判断所述条件语句对应的条件值语句中是否包括比较操作符;若不包括比较操作符,则将所述条件语句对应的条件值语句,作为所述代码表达式。
在一个实施例中,上述处理器判断所述连续套嵌取值代码块是否存在于条件语句中之后,包括:若不存在于条件语句中,判断所述连续套嵌取值代码块中,是否包括两个或两个以上的判空操作符;若是,则定位所述连续套嵌取值代码块中排布在最后的指定判空操作符;截取所述指定判空操作符之后的代码字符串,作为所述代码表达式。
在一个实施例中,上述处理器将所述代码表达式输入所述可选链操作符语法工具,在指定位置添加可选链操作符,得到所述连续套嵌取值代码块对应的可选链操作符语法的代码语句之后,包括:判断是否存在已安装的兼容工具;若否,则在系统终端的命令行导入第一指令,下载所述兼容工具对应的可选链操作符转译包;判断是否已下载完毕;若是,则在系统终端的命令行导入第二指令,安装所述兼容工具。
在一个实施例中,上述处理器判断指定代码语句中是否存在判空操作符之前,包括:获取所述可选链操作符语法工具的配置文件;读取所述配置文件中的文件地址;遍历所述文件地址对应的所有文件,确定需要进行所述待语法转换文件。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双速据率SDRAM(SSRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上所述仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。