代码数据的处理方法、装置及电子设备与流程

文档序号:28595080发布日期:2022-01-22 10:11阅读:104来源:国知局
代码数据的处理方法、装置及电子设备与流程

1.本技术涉及自动化编码技术领域,特别涉及代码数据的处理方法、装置及电子设备。


背景技术:

2.信息系统,是指由计算机硬件、网络和通讯设备、计算机软件、信息资源、信息用户和规章制度组成的以处理信息流为目的的人机一体化系统。简单地说,信息系统就是输入数据或信息,通过加工处理产生信息的系统。信息系统的任务是利用现代计算机及网络通讯技术加强企业的信息管理,通过对企业拥有的人力、物力、财力、设备、技术等资源的调查了解,建立正确的数据,加工处理并编制成各种信息资料及时提供给管理人员,以便进行正确的决策。
3.在现代信息系统中,因同一系统应用开发后需要对接多个法人主体,需要提供多主体版本,因此会出现信息系统差异化定制的需求。目前大部分针对多法人主体改造工作都集中在前端用户界面上。
4.前端代码的更改方法主要有两种。
5.第一种,首先确定前端显示上需要更改的关键词及替换后的替代词,通过手工批量查找并替换为替代词。这种方式在小规模项目中较为可行。然而对于大型项目存在明显的弊端:较难维护且容易出错,每次涉及多主体变动的时候,都要重新操作一遍。
6.第二种,将代码文件中的关键词按照正则匹配的方式替换为占位符,在代码项目的配置文件中记录占位符与替换后的替代词之间的对应关系,通过代码项目编译或执行时调用配置文件实现关键词的修改。
7.目前前端生态中有很多基于第二种方案的插件或者解决方案,但这一基于配置文件的方案具有以下问题:
8.1、关键词通过手工替换为占位符,容易出错,准确性较低。
9.2、关键词使用正则匹配的方式替换占位符,存在一定的局限性,会因为个人编码习惯和项目管理编码规范而出现许多需要调整匹配规则的场景,尤其是在涉及中文文案换行的场景,正则匹配处理起来相当繁琐,而且还需要手工进行调整使其符合语法规范。但是不管个人编码习惯如何,代码格式如何杂乱,编辑器的代码格式化功能总能准确的将代码按照既定规则整理好。简而言之,正则匹配只能将代码当作文本来处理,解决不了语法规范的问题,例如在html模板内和在javascript内的语法规范是不一样的,正则替换无法识别要替换的文案所在位置及其上下文语法环境,正则匹配替换后,很多地方需要手工干预调整,使其符合语法规范,否则代码运行报错。除此之外,还容易因为格式不规范出现错误匹配或匹配遗漏的情况,可操作性较差。


技术实现要素:

10.本技术实施方式的目的是提供一种代码数据的处理方法、装置及电子设备,以实
现精准替换并提高替换的效率。
11.为解决上述技术问题,本说明书第一方面提供一种代码数据的处理方法,包括:获取目标代码段中待更改的目标字符以及用于替换所述目标字符的替代字符;获取所述目标代码段的语法树;从所述语法树的文本类型节点中查找所述目标字符;根据所述语法树确定查找到的字符在所述目标代码段中的目标行;将所述目标行中查找到的字符替换为占位符,并建立所述占位符与所述替代字符的关联关系,以用于所述目标代码段在编译或执行时,采用所述替代字符替换所述占位符。
12.在一些实施例中,所述占位符包括以下至少一者:标识符、预置函数的函数名,以及用于表示所述标识符属性的属性符号。
13.在一些实施例中,在根据所述语法树确定查找到的字符在所述目标代码段中的目标行之后,在将所述目标行中查找到的字符替换为占位符,并建立所述占位符与所述替代字符的关联关系之前,还包括:获取标识符;根据所述标识符生成占位符。
14.在一些实施例中,根据所述标识符生成占位符,包括:确定所述目标行中查找到的字符是否位于一对html标签之间;在所述目标行中查找到的字符位于一对html标签之间的情况下,根据mustache语法格式确定用于生成占位符的元素;所述元素包括:属性符号、预置函数的函数名、属性符号与标识符之间的位置关系、预置函数的函数名与标识符之间的位置关系;根据所述标识符和所述元素生成占位符。
15.在一些实施例中,根据所述标识符生成占位符,包括:确定所述目标行中查找到的字符是否位于一对script标签之间;在所述目标行中查找到的字符位于一对script标签之间的情况下,根据js语法确定用于生成占位符的元素;所述元素包括:预置函数的函数名、预置函数的函数名与标识符之间的位置关系;根据所述标识符和所述元素生成占位符。
16.在一些实施例中,所述占位符包括自定义函数的函数名称。
17.在一些实施例中,将所述目标行中查找到的字符替换为占位符,并建立所述占位符与所述替代字符的关联关系,包括:确定所述目标行中查找到的字符是否为html标签的属性;在所述目标行中查找到的字符为html标签的属性的情况下,获取函数模板,其中,所述函数模板中含有预置字符,所述函数模板用于返回与所述预置字符对应的替代字符;获取与所述目标字符对应的标识符;采用所述标识符替换所述自定义函数的模板中的预置字符得到自定义函数的定义代码,并将所述自定义函数的定义代码写入与所述目标代码段关联的代码文件中;将所述目标行中查找到的字符替换为所述自定义函数的调用代码。
18.在一些实施例中,根据所述语法树确定查找到的字符在所述目标代码段中的目标行,包括:确定查找到的字符在所述语法树中的节点位置;根据所述节点位置确定上下文节点;根据所述上下文节点的内容确定所述查找到的字符在所述目标代码段中的上下文;根据所述查找到的字符在所述目标代码段中的上下文,确定查找到的字符在所述目标代码段中的目标行。
19.在一些实施例中,所述目标代码段在执行时,采用所述替代字符替换所述占位符,包括:接收目标用户的登录请求,所述登录请求中携带有所述目标用户的标识信息;根据所述标识信息匹配得到与所述目标用户关联的标识字符;响应于所述登录请求,将与所述目标用户关联的标识字符作为替代字符,执行所述目标代码。
20.本说明书第二方面一种代码数据的处理装置,包括:第一获取模块,用于获取目标
代码段中待更改的目标字符以及用于替换所述目标字符的替代字符;第二获取模块,用于获取所述目标代码段的语法树;查找模块,用于从所述语法树的文本类型节点中查找所述目标字符;确定模块,用于根据所述语法树确定查找到的字符在所述目标代码段中的目标行;替换模块,用于将所述目标行中查找到的字符替换为占位符,并建立所述占位符与所述替代字符的关联关系,以用于所述目标代码段在编译或执行时,采用所述替代字符替换所述占位符。
21.在一些实施例中,所述占位符包括以下至少一者:标识符、预置函数的函数名,以及用于表示所述标识符属性的属性符号。
22.在一些实施例中,所述装置还包括:第三获取模块,用于在根据所述语法树确定查找到的字符在所述目标代码段中的目标行之后,在将所述目标行中查找到的字符替换为占位符,并建立所述占位符与所述替代字符的关联关系之前,获取标识符;生成模块,用于根据所述标识符生成占位符。
23.在一些实施例中,所述生成模块包括:第一确定子模块,用于确定所述目标行中查找到的字符是否位于一对html标签之间;第二确定子模块,用于在所述目标行中查找到的字符位于一对html标签之间的情况下,根据mustache语法格式确定用于生成占位符的元素;所述元素包括:属性符号、预置函数的函数名、属性符号与标识符之间的位置关系、预置函数的函数名与标识符之间的位置关系;第一生成子模块,用于根据所述标识符和所述元素生成占位符。
24.在一些实施例中,所述生成模块包括:第三确定子模块,用于确定所述目标行中查找到的字符是否位于一对script标签之间;第四确定子模块,用于在所述目标行中查找到的字符位于一对script标签之间的情况下,根据js语法确定用于生成占位符的元素;所述元素包括:预置函数的函数名、预置函数的函数名与标识符之间的位置关系;第二生成子模块,用于根据所述标识符和所述元素生成占位符。
25.在一些实施例中,所述占位符包括自定义函数的函数名称。
26.在一些实施例中,所述替换模块包括:第五确定子模块,用于确定所述目标行中查找到的字符是否为html标签的属性;第一获取子模块,用于在所述目标行中查找到的字符为html标签的属性的情况下,获取函数模板,其中,所述函数模板中含有预置字符,所述函数模板用于返回与所述预置字符对应的替代字符;获取子模块,用于获取与所述目标字符对应的标识符;编码子模块,用于采用所述标识符替换所述自定义函数的模板中的预置字符得到自定义函数的定义代码,并将所述自定义函数的定义代码写入与所述目标代码段关联的代码文件中;替换子模块,用于将所述目标行中查找到的字符替换为所述自定义函数的调用代码。
27.在一些实施例中,所述确定模块包括:第六确定子模块,用于确定查找到的字符在所述语法树中的节点位置;第七确定子模块,用于根据所述节点位置确定上下文节点;第八确定子模块,用于根据所述上下文节点的内容确定所述查找到的字符在所述目标代码段中的上下文;第九确定子模块,用于根据所述查找到的字符在所述目标代码段中的上下文,确定查找到的字符在所述目标代码段中的目标行。
28.在一些实施例中,所述装置还包括:接收模块,用于接收目标用户的登录请求,所述登录请求中携带有所述目标用户的标识信息;匹配模块,用于根据所述标识信息匹配得
到与所述目标用户关联的标识字符;响应模块,用于响应于所述登录请求,将与所述目标用户关联的标识字符作为替代字符,执行所述目标代码。
29.本说明书第三方面一种电子设备,包括:存储器和处理器,所述处理器和所述存储器之间互相通信连接,所述存储器中存储有计算机指令,所述处理器通过执行所述计算机指令,从而实现第一方面所述方法的步骤。
30.本说明书第四方面一种计算机存储介质,所述计算机存储介质存储有计算机程序指令,所述计算机程序指令被执行时实现第一方面所述方法的步骤。
31.本说明书实施例所提供的代码数据的处理方法、装置及电子设备,在获取到目标代码段中待更改的目标字符以及用于替换目标字符的替代字符后,从目标代码段的语法树的文本类型节点中查找目标字符,再根据语法树确定查找到的字符在目标代码段中的目标行,将目标行中的字符替换为占位符。通过直接操作语法树节点,可以精准识别目标字符,并识别出目标字符所在语法环境,从而不会出现替换错误及遗漏而引起代码异常的问题,可以有效提升查找和替换的准确率和效率。
附图说明
32.为了更清楚地说明本技术实施方式或现有技术中的技术方案,下面将对实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
33.图1示出了根据本发明实施例的代码数据的处理方法的一种实施例的方法流程图;
34.图2示出了根据标识符生成占位符的一种方法实施例的流程图;
35.图3示出了根据标识符生成占位符的另一种方法实施例的流程图;
36.图4示出了将目标行中查找到的字符替换为占位符,并建立占位符与替代字符的关联关系的一种方法实施例的流程图;
37.图5示出了根据本发明实施例的代码数据的处理方法的另一种实施例的方法流程图;
38.图6示出了根据本说明书实施例的一种代码数据的处理装置的模块结构图;
39.图7示出了根据本说明书实施例的一种电子设备的结构示意图。
具体实施方式
40.为了使本技术领域的人员更好地理解本技术中的技术方案,下面将结合本技术实施方式中的附图,对本技术实施方式中的技术方案进行清楚、完整地描述,显然,所描述的实施方式仅仅是本技术一部分实施方式,而不是全部的实施方式。基于本技术中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都应当属于本技术保护的范围。
41.针对现有的在对一个大规模代码项目进行多法人主体改造的时候所存在的编码风格差异较大、多种编码范式共存、多种框架并行的问题,如果基于常规的正则匹配方式进行处理,则会导致很多异常情况的发生,且无法解决语法规范的问题,进一步的,在正则替
换后,还需要进行手工排查和调整,替换的准确度和效率都很低。为了解决现有的多法人主体改造所存在的替换准确度和效率低下的问题,在本例中提供了一种代码数据的处理方法,通过语法解析结果按照指定的规则快速精准地将项目代码里的文案替换成占位标识,该方法对大型项目的改造的优势比较明显。
42.本说明书中的代码数据可以是代码段中的具体代码,也可以是代码段被执行时所需要的数据。
43.本说明书中的代码段、目标代码段可以是一个代码文件中连续的多行代码;也可以是一个代码文件中不相邻的两个或多个代码块,其中一个代码块包括连续的多行代码;还可以是分散在不同代码文件中的多个代码块。
44.含有目标代码段的代码文件被组织在一个代码项目中,代码项目是指通过编码软件(也称编程软件、代码开发软件,例如vscode、intellij idea、sublimetext、plsql server)将多个代码文件按照一定的规则组织在一起形成的代码文件集合。编码软件具有代码编辑窗口,可以用于在其中编写、修改、查看一个代码文件中的具体代码语句。编码软件能够将各个代码文件中的代码语句进行编译、链接形成可执行文件,可执行文件在执行时,实现代码文件中的代码语句所表达的指令操作。所形成的可执行文件即为用户所使用的软件。
45.代码文件的类型有多种,可以采用多种编码规则进行编写,得到后缀不同的代码文件。例如,采用java编码规则编写得到后缀为“.java”的文件,采用javascript编码规则编写得到后缀为“.js”的文件,采用html编码规则编写得到后缀为“.html”的文件。对于不同的编码规则,编写用于在前端呈现的代码也不同。
46.本技术中的“前端”是指为用户呈现信息、提供用户操作接口的部分。例如,用于在通过浏览器浏览网页时,网页上所显示的内容就是前端呈现的内容。
47.本说明书所提供的代码数据的处理方法的实施主体可以是具有逻辑计算功能的电子设备,例如,计算机客户端、服务器,或者是多个服务器形成的计算机集群。
48.代码项目开发过程包括源代码的编写、源代码及源代码对应的可执行文件的测试,通常都需要多人共同协作,为此需要采用代码版本控制软件对各个编码人员所编写的源代码进行管理。代码版本控制软件包括服务器端软件和客户端软件,每个编码人员所使用的编码终端(例如计算机)或者每个测试人员所使用的测试终端(例如计算机)各自运行一个客户端软件。版本控制软件例如可以为git、svn、cvs。
49.编码人员在编码终端编写好某个模块的源代码以后,通过客户端软件将模块源代码提交到代码版本控制服务器,服务器会将不同编码人员所编码的源代码融合在一起形成一个个代码文件,并将代码文件按照一定的规则组织在一起。
50.当测试人员需要对源代码进行测试时,通过客户端软件从代码版本控制服务器获取代码文件,采用自己编写的软件测试工具进行测试,得到测试结果。当编码人员需要对源代码进行修改时,通过客户端从代码版本控制服务器获取需要的代码文件,并将代码文件融入客户端本地的代码项目中,基于融合后的代码项目对源代码进行修改,修改后再将由改动的文件提交到代码版本控制服务器。
51.当代码版本控制服务器上的源代码编写或修改得相对完善时,会有人将代码版本控制服务器存储的源代码进行编译、链接、打包形成可执行文件,部署到该软件的采购商
(例如,为银行编写软件系统,则银行为该软件的采购商,编写源代码的单位为供应商)服务器上,该可执行文件即为软件。软件运行的过程便可以实现对应源代码所表达的功能。
52.本说明书所提供的代码数据的处理方法可以应用于任一上述编码终端,也可以应用于运行上述代码版本控制服务器的电子设备。
53.虽然本说明书提供了如下述实施例或附图所示的方法操作步骤或装置结构,但基于常规或者无需创造性的劳动在所述方法或装置中可以包括更多或者更少的操作步骤或模块单元。在逻辑性上不存在必要因果关系的步骤或结构中,这些步骤的执行顺序或装置的模块结构不限于本说明书实施例描述及附图所示的执行顺序或模块结构。所述的方法或模块结构的在实际中的装置或终端产品应用时,可以按照实施例或者附图所示的方法或模块结构连接进行顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至分布式处理环境)。
54.如图1所示,代码数据的处理方法包括如下步骤。
55.s101:获取目标代码段中待更改的目标字符以及用于替换目标字符的替代字符。
56.待更改的目标字符以及用于替换目标字符的替代字符,可以预先存储在一个配置文件中。相应地,步骤s101可以表现为获取并读取配置文件的形式。
57.配置文件可以是根据客户需求而确定的,例如,代码项目原先用于实现a公司的网站,更改后用于实现b公司的网站,则代码项目中待更改的目标字符包括“a公司”,对应的替代字符可以为“b公司”。
58.本技术中的“目标字符”、“替代字符”可以是数字或字母,也可以是*、$等符号,也可以是这些符号组成的一串字符。目标字符和替代字符可以是一一对应的。
59.s102:获取目标代码段的语法树。
60.在计算机科学中,语法树(英文:syntax tree),或者抽象语法树(英文:abstract syntax tree,缩写:ast),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节。
61.抽象语法树的第一个特点为:不依赖于具体的文法。前后文无关文法,要求在语法分析时候,构造出相同的语法树,这样可以给编译器后端提供了清晰,统一的接口。即使是前端采用了不同的文法,都只需要改变前端代码,而不用连累到后端。即减少了工作量,也提高的编译器的可维护性。
62.抽象语法树的第二个特点为:不依赖于语言的细节。在各编译器中,gcc可以编译多种语言,例如c,c++、java、ada、object c、fortran、pascal、cobol等等。在前端,gcc对不同的语言进行词法、语法分析和语义分析后,产生抽象语法树形成中间代码作为输出,供后端处理。要做到这一点,就必须在构造语法树时,不依赖于语言的细节。例如在不同的语言中,类似于if-condition-then这样的语句有不同的表示方法,对应的语法树可以是相同的。
63.在步骤s102之前,还可以包括步骤:生成目标代码段的语法树。在一些实施例中,也可以预先生成并存储目标代码段的语法树。在一些实施例中,语法树还可以是其他电子设备生成并传送给步骤s102的执行主体的。
64.可以采用语法解析器生成语法树,基本每种语言都有对应的语法解析器。vscode的代码格式化插件都内置了解析器,例如可以选择prettier插件,利用其内置的解析器对vue前端显示的代码文件或目标代码段进行解析生成语法树。
65.s103:从语法树的文本类型节点中查找目标字符。
66.语法树的节点类型包括多种,例如:js语法树节点类型可以包括“literal”、“expressionstatement”、“property”、“directiveliteral”等近百种类型,其中“literal”即为文本类型的节点。
67.s104:根据语法树确定查找到的字符在目标代码段中的目标行。
68.语法树体现了源代码的语法结构,根据语法树可以获知语法树上的节点在目标代码段中的目标行,甚至可以进一步找到字符在目标行中更为具体的位置。
69.具体地,可以先确定查找到的字符在所述语法树中的节点位置,然后根据节点位置确定上下文节点,再根据上下文节点的内容确定所述查找到的字符在所述目标代码段中的上下文,最后根据所述查找到的字符在所述目标代码段中的上下文,确定查找到的字符在所述目标代码段中的目标行。
70.s105:将目标行中查找到的字符替换为占位符,并建立占位符与替代字符的关联关系,以用于目标代码段在编译或执行时,采用替代字符替换占位符。
71.需替换的字符在目标代码段中的位置不同,其所涉及的语法可能会有所不同,因此,生成占位符的规则以及生成的占位符的形似也不同。
72.在一些实施例中,在步骤s104和s105之间,还包括以下步骤:获取标识符,根据标识符生成占位符。
73.标识符是待更改的目标字符的标识。多个目标字符对应的标识符可以是顺序编号的,也可以是随机编号的。
74.在一些实施例中,标识符是预先确定的。例如,在目标字符和替代字符一一对应的配置文件中,目标字符、替代字符还对应有一个标识符。
75.在一些实施例中,标识符是临时生成的。例如,在需要使用第一个标识符之前,生成标识为“xh0001”的第一标识符;在需要使用第二个标识符之前,生成标识为“xh0002”的第二标识符,以此类推生成各个标识符。
76.在一些实施例中,占位符包括以下至少一者:标识符、预置函数的函数名,以及用于表示标识符属性的属性符号。
77.预置函数是指代码项目的代码文件中预先定义的函数。该预置函数用于返回与形式参数对应的内容。在使用预置函数时,可以直接编写该函数的调用代码即可。可以将标识符作为预置函数的形式参数,使得预置函数返回与标识符对应的替代字符,即通过预置函数建立占位符与替代字符的关联关系。
78.属性符号,用于表示标识符属性。例如表示标识符为一串字符还是一个表达式。
79.在一些实施例中,如图2所示,可以通过如下步骤根据标识符生成占位符。
80.s201:确定目标行中查找到的字符是否位于一对html标签之间。
81.s202:在目标行中查找到的字符位于一对html标签之间的情况下,根据mustache语法格式确定用于生成占位符的元素;元素包括:属性符号、预置函数的函数名、属性符号与标识符之间的位置关系、预置函数的函数名与标识符之间的位置关系。
82.s203:根据标识符和元素生成占位符。
83.例如,原代码文件中的内容为“《标签》xxx公司《标签》”,则可以根据mustache的语法格式确定属性符号为“{{}}”,预置函数的函数名为“$t”,生成占位符{{$t(“xh0001”)}},即修改的代码为“《标签》{{$t(“xh0001”)}}《标签》”,函数$t(“xh0001”)用于查找并返回与标识符xh0001对应的字符,即替代字符。
84.在一些实施例中,如图3所示,可以通过如下步骤根据标识符生成占位符。
85.s301:确定目标行中查找到的字符是否位于一对script标签之间。
86.s302:在目标行中查找到的字符位于一对script标签之间的情况下,根据js语法确定用于生成占位符的元素;元素包括:预置函数的函数名、预置函数的函数名与标识符之间的位置关系。
87.s303:根据标识符和元素生成占位符。
88.例如,原代码文件中的内容为“xxx公司”,则可以根据js语法确定预置函数的函数名为“$t”,生成占位符$t(“xh0002”)。即修改后的代码为“$t(“xh0002”)”,函数$t(“xh0002”)用于查找并返回与标识符xh0002对应的字符,即替代字符。
89.在一些实施例中,占位符包括自定义函数的函数名称。
90.区别于预置函数,自定义函数是指原代码项目中没有定义的函数,需要在原代码项目的基础上另行编写定义代码的函数。
91.在一些实施例中,如图4所示,可以通过如下步骤实现上述步骤s105。
92.s401:确定目标行中查找到的字符是否为html标签的属性。
93.html标签可以拥有属性。属性提供了有关html元素的更多的信息。属性总是以名称/值对的形式出现,比如:name="value"。属性总是在html元素的开始标签中规定。例如,《h1》定义标题的开始,《h1 align="center"》拥有关于对齐方式的附加信息。
94.s402:在目标行中查找到的字符是否为html标签的属性的情况下,获取函数模板,其中,函数模板中含有预置字符,函数模板用于返回与预置字符对应的替代字符。
95.s403:获取与目标字符对应的标识符。
96.标识符是待更改的目标字符的标识。多个目标字符对应的标识符可以是顺序编号的,也可以是随机编号的。
97.在一些实施例中,标识符是预先确定的。例如,在目标字符和替代字符一一对应的配置文件中,目标字符、替代字符还对应有一个标识符。
98.在一些实施例中,标识符是临时生成的。例如,在需要使用第一个标识符之前,生成标识为“xh0001”的第一标识符;在需要使用第二个标识符之前,生成标识为“xh0002”的第二标识符,以此类推生成各个标识符。
99.s404:采用标识符替换自定义函数的模板中的预置字符得到自定义函数的定义代码,并将自定义函数的定义代码写入与目标代码段关联的代码文件中。
100.s405:将目标行中查找到的字符替换为自定义函数的调用代码。
101.例如,原代码文件中的内容为“《a title=”xxx公司首页”href=”xxx”》”,修改后的代码为“《a:title=”transformtitle”href=”xxx”》”,同时在代码文件中生成函数名为transformtitle的函数定义代码,例如可以为transformtitle(){return this.$t(“xh0001”)+

首页’},将静态属性修改为动态绑定属性。
102.本说明书实施例所提供的代码数据的处理方法,在获取到目标代码段中待更改的目标字符以及用于替换目标字符的替代字符后,从目标代码段的语法树的文本类型节点中查找目标字符,再根据语法树确定查找到的字符在目标代码段中的目标行,将目标行中的字符替换为占位符,直接操作语法树节点,既可以精准识别目标字符,并识别目标字符所在语法环境,不会出现替换错误及遗漏而引起代码异常的情况;查找及替换的工作量可以由计算机完成,人工的工作量较少。
103.上述根据查找到的字符在语法树中的节点位置确定查找到的字符在代码文件中的位置,并根据查找到的字符在代码文件中的目标行,即查找到的字符所处的语法上下文环境,自动生成符合对应语法规范的占位符,而后续适应多主体调整时,只需要调整写有占位符与替代字符之间对应关系的配置文件即可,简单直观,有很好的可维护性。
104.在一些实施例中,占位符的标识符为配置文件中的第一字段,替代字符为配置文件中的第二字段,配置文件中包括至少一个第二字段,第一字段的内容和第二字段的内容一一对应。
105.例如,配置文件中有三个字段,第一字段为占位符的标识,第三字段为待更改的目标字符,如可以为a公司对应的字符,第二字段为目标字符的替代字符,如可以为b公司对应的字符。
106.占位符的标识符是用于生成占位符的标识符。占位符的标识符可以是在图1所述步骤执行之前便已存在于配置文件中的,也可以是图1所述步骤执行时生成并写入配置文件中的。本技术中的第一字段、第二字段、第三字段仅用于区分各字段的内容,并不表示存在于配置文件中的先后顺序。
107.上述配置文件可以是指一个配置文件,该配置文件中具有一个第一字段(即占位符的标识)、一个第三字段(即待更改的目标字符)、至少一个第二字段(即目标字符的替代字符)。
108.上述配置文件也可以是指多个配置文件,每个配置文件包括一个第一字段(即占位符的标识)、一个第二字段(即目标字符的替代字符),有的配置文件中还可以包括个第三字段(即待更改的目标字符)。
109.如图5所示,在步骤s105之后还可以包括如下步骤。
110.s106:接收目标用户的登录请求,登录请求中携带有目标用户的标识信息。
111.s107:根据标识信息匹配得到与目标用户关联的标识字符。
112.可以通过配置文件预先将目标用户与标识字符关联起来。例如,将多个目标用户分为一个群组,这个群组的标识作为用户主体的标识,将用户主体的标识与上述一个第二字段关联,如第二字段“b”与b公司的标识关联,第二字段“c”与c公司的标识关联。从而根据目标用户可以确定用户主体的标识,进而确定需要采用具体哪一个第二字段。即,通过各个第二字段与用户主体的标识之间的对应关系,可以使得代码项目的前端根据不同用户显示不同的内容。
113.s108:响应于登录请求,将与目标用户关联的标识字符作为替代字符,执行目标代码。
114.通过上述步骤s106至s108,在配置好各个用户主体对应的替代字符之后,各个用户主体下的人员进入系统,会根据其所属的用户主体展示对应的主体文案,不再需要重复
部署多套系统,兼顾了数据统一和区分展示,提高了系统的可扩展性和可维护性。
115.基于同一发明构思,本说明书实施例中还提供了一种代码数据的处理装置,如下面的实施例所述。由于代码数据的处理装置解决问题的原理与代码数据的处理方法相似,因此代码数据的处理装置的实施可以参见代码数据的处理方法的实施,重复之处不再赘述。以下所使用的,术语“单元”或者“模块”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。图6是本说明书实施例的代码数据的处理装置的一种结构框图,如图6所示,包括第一获取模块10、第二获取模块20、查找模块30、确定模块40和替换模块50。下面对该装置的结构进行说明。
116.第一获取模块10用于获取目标代码段中待更改的目标字符以及用于替换目标字符的替代字符。
117.第二获取模块20用于获取目标代码段的语法树。
118.查找模块30用于从语法树的文本类型节点中查找目标字符。
119.确定模块40用于根据语法树确定查找到的字符在目标代码段中的目标行。
120.替换模块50用于将目标行中查找到的字符替换为占位符,并建立占位符与替代字符的关联关系,以用于目标代码段在编译或执行时,采用替代字符替换占位符。
121.在一些实施例中,占位符包括以下至少一者:标识符、预置函数的函数名,以及用于表示标识符属性的属性符号。
122.在一些实施例中,所述装置还包括第三获取模块60和生成模块70。
123.第三获取模块60用于在根据所述语法树确定查找到的字符在所述目标代码段中的目标行之后,在将所述目标行中查找到的字符替换为占位符,并建立所述占位符与所述替代字符的关联关系之前,获取标识符。
124.生成模块70用于根据标识符生成占位符。
125.在一些实施例中,生成模块70包括第一确定子模块71、第二确定子模块72和第一生成子模块73。
126.第一确定子模块71用于确定目标行中查找到的字符是否位于一对html标签之间。
127.第二确定子模块72用于在目标行中查找到的字符位于一对html标签之间的情况下,根据mustache语法格式确定用于生成占位符的元素;元素包括:属性符号、预置函数的函数名、属性符号与标识符之间的位置关系、预置函数的函数名与标识符之间的位置关系。
128.第一生成子模块73用于根据标识符和元素生成占位符。
129.在一些实施例中,生成模块70包括第三确定子模块74、第四确定子模块75和第二生成子模块76。
130.第三确定子模块74用于确定目标行中查找到的字符是否位于一对script标签之间。
131.第四确定子模块75用于在目标行中查找到的字符位于一对script标签之间的情况下,根据js语法确定用于生成占位符的元素;元素包括:预置函数的函数名、预置函数的函数名与标识符之间的位置关系。
132.第二生成子模块76用于根据标识符和元素生成占位符。
133.在一些实施例中,占位符包括自定义函数的函数名称。
134.在一些实施例中,替换模块50包括第五确定子模块51、第一获取子模块52、获取子模块53、编码子模块54和替换子模块55。
135.第五确定子模块51用于确定目标行中查找到的字符是否为html标签的属性。
136.第一获取子模块52用于在目标行中查找到的字符为html标签的属性的情况下,获取函数模板,其中,函数模板中含有预置字符,函数模板用于返回与预置字符对应的替代字符。
137.获取子模块53用于获取与目标字符对应的标识符。
138.编码子模块54用于采用标识符替换自定义函数的模板中的预置字符得到自定义函数的定义代码,并将自定义函数的定义代码写入与目标代码段关联的代码文件中。
139.替换子模块55用于将目标行中查找到的字符替换为自定义函数的调用代码。
140.在一些实施例中,确定模块40包括第六确定子模块41、第七确定子模块42、第八确定子模块43和第九确定子模块44。
141.第六确定子模块41用于确定查找到的字符在语法树中的节点位置。
142.第七确定子模块42用于根据节点位置确定上下文节点。
143.第八确定子模块43用于根据上下文节点的内容确定查找到的字符在目标代码段中的上下文。
144.第九确定子模块44用于根据查找到的字符在目标代码段中的上下文,确定查找到的字符在目标代码段中的目标行。
145.在一些实施例中,所述装置还包括接收模块80、匹配模块90和响应模块100。
146.接收模块80用于接收目标用户的登录请求,所述登录请求中携带有所述目标用户的标识信息。
147.匹配模块90用于根据所述标识信息匹配得到与所述目标用户关联的标识字符。
148.响应模块100用于响应于所述登录请求,将与所述目标用户关联的标识字符作为替代字符,执行所述目标代码。
149.本发明实施例还提供了一种电子设备,如图7所示,该电子设备可以包括处理器701和存储器702,其中处理器701和存储器702可以通过总线或者其他方式连接,图7中以通过总线连接为例。
150.处理器701可以为中央处理器(central processing unit,cpu)。处理器701还可以为其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等芯片,或者上述各类芯片的组合。
151.存储器702作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态计算机可执行程序以及模块,如本发明实施例中的代码数据的处理方法对应的程序指令/模块(例如,图6所示的第一获取模块10、第二获取模块20、查找模块30、确定模块40和替换模块50)。处理器701通过运行存储在存储器702中的非暂态软件程序、指令以及模块,从而执行处理器的各种功能应用以及数据分类,即实现上述方法实施例中的代码数据的处理方法。
152.存储器702可以包括存储程序区和存储数据区,其中,存储程序区可存储操作系
统、至少一个功能所需要的应用程序;存储数据区可存储处理器701所创建的数据等。此外,存储器702可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施例中,存储器702可选包括相对于处理器701远程设置的存储器,这些远程存储器可以通过网络连接至处理器701。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
153.所述一个或者多个模块存储在所述存储器702中,当被所述处理器701执行时,执行如图1至图5所示实施例中的代码数据的处理方法。
154.上述电子设备具体细节可以参阅图1至图5对应实施例中的相关描述和效果进行理解,此处不再赘述。
155.本领域技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述存储介质可为磁碟、光盘、只读存储记忆体(read-only memory,rom)、随机存储记忆体(random access memory,ram)、快闪存储器(flash memory)、硬盘(hard disk drive,缩写:hdd)或固态硬盘(solid-state drive,ssd)等;所述存储介质还可以包括上述种类的存储器的组合。
156.在20世纪90年代,对于一个技术的改进可以很明显地区分是硬件上的改进(例如,对二极管、晶体管、开关等电路结构的改进)还是软件上的改进(对于方法流程的改进)。然而,随着技术的发展,当今的很多方法流程的改进已经可以视为硬件电路结构的直接改进。设计人员几乎都通过将改进的方法流程编程到硬件电路中来得到相应的硬件电路结构。因此,不能说一个方法流程的改进就不能用硬件实体模块来实现。例如,可编程逻辑器件(programmable logic device,pld)(例如现场可编程门阵列(field programmable gate array,fpga))就是这样一种集成电路,其逻辑功能由用户对器件编程来确定。由设计人员自行编程来把一个数字系统“集成”在一片pld上,而不需要请芯片制造厂商来设计和制作专用的集成电路芯片2。而且,如今,取代手工地制作集成电路芯片,这种编程也多半改用“逻辑编译器(logic compiler)”软件来实现,它与程序开发撰写时所用的软件编译器相类似,而要编译之前的原始代码也得用特定的编程语言来撰写,此称之为硬件描述语言(hardware description language,hdl),而hdl也并非仅有一种,而是有许多种,如abel(advanced boolean expression language)、ahdl(altera hardware description language)、confluence、cupl(cornell university programming language)、hdcal、jhdl(java hardware description language)、lava、lola、myhdl、palasm、rhdl(ruby hardware description language)等,目前最普遍使用的是vhdl(very-high-speed integrated circuit hardware description language)与verilog2。本领域技术人员也应该清楚,只需要将方法流程用上述几种硬件描述语言稍作逻辑编程并编程到集成电路中,就可以很容易得到实现该逻辑方法流程的硬件电路。
157.本说明书中的各个实施方式均采用递进的方式描述,各个实施方式之间相同相似的部分互相参见即可,每个实施方式重点说明的都是与其他实施方式的不同之处。
158.上述实施方式阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。
159.为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本
申请时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
160.通过以上的实施方式的描述可知,本领域的技术人员可以清楚地了解到本技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本技术各个实施方式的某些部分的方法。
161.本技术可用于众多通用或专用的计算机系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络pc、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
162.本技术可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本技术,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
163.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
164.上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
165.虽然本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
166.上述实施例阐明的系统、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
167.虽然本说明书实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者
多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。
168.为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
169.本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
170.本说明书是参照根据本说明书实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
171.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
172.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
173.在一个典型的配置中,计算设备包括一个或多个处理器(cpu)、输入/输出接口、网络接口和内存。
174.内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(ram)和/或非易失性内存等形式,如只读存储器(rom)或闪存(flash ram)。内存是计算机可读介质的示例。
175.计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法
或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(pram)、静态随机存取存储器(sram)、动态随机存取存储器(dram)、其他类型的随机存取存储器(ram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、快闪记忆体或其他内存技术、只读光盘只读存储器(cd-rom)、数字多功能光盘(dvd)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
176.本领域技术人员应明白,本说明书的实施例可提供为方法、系统或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
177.本说明书实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
178.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书实施例的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
179.以上所述仅为本说明书实施例的实施例而已,并不用于限制本说明书实施例。对于本领域技术人员来说,本说明书实施例可以有各种更改和变化。凡在本说明书实施例的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书实施例的权利要求范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1