生成唯一标识符的方法、系统及电子装置与流程



1.本技术涉及数据存储技术领域,具体而言,涉及一种生成唯一标识符的方法、系统及电子装置。


背景技术:



2.现如今随着软件开发中功能逻辑的复杂化程度的剧增,现有计算机领域中常用的数据结构陆续暴露了很多的问题。现有的数据结构是采用“堆栈”的方式,即“先进后出”的方式。堆栈的方式有很大的读取上的缺陷。例如在现有技术中,在进行无序的数据索引的情况下,使用传统的堆栈的方式的话此时对于查时间的复杂度是o(n),插入的复杂度是o(1),其中查相比于插入效率就慢了很多,这对于软件层面上的执行来说效率是低下的,尤其是涉及到需要快速读取和频繁读取的工作中。
3.对应上述问题,公开号为cn112948642的中国专利文献公开了一种嵌入式哈希表,其中,包括链接法哈希表与双向链表;所述双向链表包括若干用于存储key键值的键值结点,所述链接法哈希表包括若干用于存储value数据的链接结点;各个键值结点之间均为双向连接,且每个键值结点与对应的链接结点之间为双向连接。基于散列函数计算key键值对应的哈希码,读取哈希码对应的链接结点。上述专利通过将哈希表与双向链表的结合,从而简化了逻辑,相对于堆栈来说,上述专利文献中公开的技术可以将将查的时间复杂度从o(n)降低至o(1)。
4.但是上述文件中“基于散列函数计算key键值对应的哈希码,读取哈希码对应的链接结点”中没有考虑key键值可能会相同的问题,这样就一定会在实际的应用中造成哈希冲突,导致在链表数据读取的时候发生错误,从而影响整个操作的流程。
5.相应的,本领域需要一种新的数据结构来解决上述问题。


技术实现要素:



6.为了克服上述缺陷,提出了本发明,以提供解决或至少部分地解决现有技术中标识符重复产生的容易发生哈希冲突的问题。
7.在第一方面,本发明提供一种生成唯一标识符的方法,所述方法包括:
8.基于目标文件生成抽象语法树;
9.获取抽象语法树中的所有标识符节点;
10.基于所述标识符的自身信息以及散列算法得到第一散列值;
11.将所述标识符的名称改为所述第一散列值。
12.进一步的,所述标识符的自身信息包括标识符的名称以及相应的统一资源标识符;
13.所述基于所述标识符的自身信息以及散列算法得到第一散列值,包括:
14.基于所述标识符的名称和相应的统一资源标识符以及散列算法得到第一散列值。
15.进一步的,所述获取抽象语法树中的所有标识符节点包括:
16.通过对抽象语法树进行深度遍历,出所有的标识符。
17.进一步的,所述基于所述标识符的名称和相应的统一资源标识符以及散列算法得到第一散列值,包括:
18.将标识符名称通过散列算法得到第二散列值;
19.将标识符统一资源标识符通过散列算法得到第三散列值;
20.基于第二散列值与第三散列值得到第一散列值。
21.进一步的,所述基于所述标识符的名称和相应的统一资源标识符以及散列算法得到第一散列值,包括:
22.将标识符名称与标识符统一资源标识符进行整合形成第一字符串;
23.将第一字符串通过散列算法得到第一散列值。
24.进一步的,所述基于目标文件生成抽象语法树,包括:
25.通过语法分析器从目标文件生成抽象语法树。
26.在第二方面,一种运行时源码的处理方法,包括双向链表以及哈希表,
27.其方法包括:从可执行文件中提取函数信息,其中函数信息包括函数对应的标识符名称,所述标识符名称是基于一种生成唯一标识符的方法所得到的标识符的名称;
28.基于函数信息在所述双向链表中创建一个新的链表节点,其中所述双向链表的链表结点中存储key以及相对应的value,其中所述链表结点中存储的key是对应函数的标识符,其中各个所述链表结点之间均为双向连接;
29.将key存储在哈希表中。
30.在第三方面,提供一种生成唯一标识符的方法的系统,所述系统包括:
31.生成模块:基于目标文件生成抽象语法树;
32.查模块:获取抽象语法树中的所有标识符节点;
33.计算模块:基于所述标识符以及散列算法得到第一散列值;
34.赋值模块:将所述标识符的名称改为所述第一散列值。
35.在第四方面,提供一种计算机可读存储介质,该计算机可读存储介质其中存储有多条程序代码,所述程序代码适于由处理器加载并运行以执行上述第一方面的技术方案中任一项技术方案所述的生成唯一标识符的方法。
36.在第五方面,本发明提供一种电子装置,包括处理器和存储装置,所述存储装置适于存储多条程序代码,其特征在于,所述程序代码适于由所述处理器加载并运行以执行上述用于优化移动端无线网络质量的方法的技术方案中任一项技术方案所述的生成唯一标识符的方法。
37.本发明上述一个或多个技术方案,至少具有如下一种或多种有益效果:
38.(1)通过抽象语法树遍历所有标识符,之后通过标识符的自身信息以及散列算法得到融合标识符多种信息的第一散列值,避免了标识符重复的问题。规范了相关的标识符名称,使之后再进行散列计算的时候不会引起哈希冲突,减少了出现意外的风险,提高了系统的稳定性。
39.(2)通过标识符的以及相应的统一资源标识符定义新表示名称,命名的规则比较简单,便于操作,节省计算资源。
40.(3)通过双向链表以及哈希表结合唯一的标识符命名,从而降低了系统的出错几
率,相对于传统的堆栈式,同时增加了数据处理时的速度降低了整体的时间复杂度。
附图说明
41.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
42.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
43.图1是根据本技术实施例的一种生成唯一标识符的方法的主要流程示意图;
44.图2是根据本技术实施例的一种生成唯一标识符的方法的子流程示意图;
45.图3是根据本技术实施例的一种生成唯一标识符的方法的子流程示意图;
46.图4是根据本技术实施例的一种生成唯一标识符的方法的子流程示意图。
具体实施方式
47.为了使本技术领域的人员更好地理解本技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分的实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本技术保护的范围。
48.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
49.这里先解释本发明涉及到的一些术语。
50.抽象语法树:抽象语法树(abstract syntax tree,ast)是用正式语言编写的文本(通常是源代码)的抽象语法结构的树表示。树的每个节点表示文本中出现的构造。抽象语法树是编译器中广泛使用的数据结构,用于表示程序代码的结构。ast通常是编译器语法分析阶段的结果。它通常通过编译器所需的几个阶段作为程序的中间表示,并且对编译器的最终输出有很大的影响。
51.标识符:标识符(identifier)是指用来标识某个实体的一个符号,在不同的应用环境下有不同的含义。在计算机编程语言中,标识符是用户编程时使用的名字,用于给变量、常量、函数、语句块等命名,以建立起名称与使用之间的关系。标识符通常由字母和数字以及其它字符构成。
52.深度遍历:深度遍历(depth-first search,简称dfs)是一种用于遍历或搜索树或图数据结构的算法。该算法从根节点开始(在图的情况下选择某个任意节点作为根节点)并在回溯之前沿着每个分支尽可能地探索。通过深度遍历,就可以遍历整个图,从节点的角度
来说,通过深度遍历,就可以遍寻到所有的节点。
53.为了便于理解本发明,在本发明的一个应用场景的例子中,以dart语言为例,说明现有技术中遇到的问题。dart语言是声明式编程的一种,基于声明式编程的特性,在app侧运行时,需要将模板代码转化成领域特定语言json文件,并且动态解析此json文件。在运行时对于标识符的查,需要维持一整套作用域体系,以便于进行高速的读写数据。但是堆栈的方式读取的时间复杂度为o(n),若使用哈希表加双向链表的形式则其中引用函数时,容易引发错误。
54.参阅附图1-4,图1是根据本发明的一个实施例的一种生成唯一标识符的方法的主要步骤流程示意图。如图1所示,本发明实施例中的一种生成唯一标识符的方法主要包括下列步骤s10-步骤s40。
55.步骤s10:基于目标文件生成抽象语法树。
56.在本实施例中,目标文件是语法文件,语法文件是指满足一定的词法规则与语法规则的文件。其中语法由一个为该语法命名的头部定义和一系列可以互相引用的语言规则组成,抽象语法树是对目标文件进行语法分析阶段的结果。
57.一个实施方式中,使用语法分析器从目标文件生成抽象语法树。本实施方式中目标文件选用dart文件,将dart代码字符串分析成json类型或者xml类型的抽象语法树。在本实施例中使用analyzer库将dart代码转换为抽象语法树,具体而言,通过调用analyzerparsestring/parsefile方法形成抽象语法树。
58.步骤s20:获取抽象语法树中的所有标识符节点。
59.在本实施例中,通过深度遍历获取抽象语法树中的所有标识符节点。抽象语法树是由节点构成的,其中语法树的核心就是节点。
60.一个实施方式中,为了更容易理解本技术,此处简述一下抽象语法树。在抽象语法树形成时会经历词法分析与语法分析。在进行词法分析时,会读取dart文件中的代码,之后按照analyzerparsestring/parsefile方法内设的规则合并成一个一维标识(tokens)数组。标识(tokens)是由type(类)和value(值)组成的,此处给出一个标识数组的一部分以方便理解:
[0061][0062]
[0063]
可以通过上述代码发现,抽象语法树在词法分析的过程中可以识别出源代码中的标识符(indentifier)。在语法分析之后会生成标识(tokens)序列,以变量为例,此处给出部分代码以便于理解:
[0064][0065][0066]
其中type声明类型为变量,id表示其变量名称,int表示变量的初始值。其中id的type为:indentifier(标识符),name(名称)为标识符的字符串。以函数为例,则会有type声明类型为函数,id表示其函数名称。所以通过此处抽象语法树的例子可以明白,标识符的id属性指的就是标识符的name,即标识符的名称。
[0067]
可以理解的是,通过对基于dart文件得到的抽象语法树进行深度遍历即可获取所有标识符节点,从而得到标识符信息。其中标识符信息则会有name,即标识符名称,仅用标识符名称进行标识在哈希表中很容易产生哈希冲突,因为不同文件的函数或变量其标识符的名称是有可能相同的。所以在得到标识符名称的同时还需要得到标识符对应的uri信息,其中uri信息是不能从遍历语法树中得到的,uri信息需要编译得到。
[0068]
之后将name与uri信息进行整合后,函数的标识符就会有name以及uri两种信息,分别表示函数的名称以及函数的来源。此处对name以及uri做一个说明,其中函数的name对应函数的名字,uri对应函数库,一个函数库中存有很多函数,在一个函数库中每个函数的
name均是不同的。但是在实际使用中会使用不同的多个函数库,多个函数库中可能就会有name相同的函数,这样就会对引起严重的哈希冲突,使得在哈希计算的时候,两个不同的函数,但是最后得到了一样的哈希值,从而不能顺利的读取数据,产生报错,或者是调用了错误的函数。
[0069]
步骤s30:基于所述标识符的自身信息以及散列算法得到第一散列值。
[0070]
在本实施例中,所述基于所述标识符的自身信息以及散列算法得到第一散列值,包括,步骤s300:基于所述标识符的名称和相应的统一资源标识符以及散列算法得到第一散列值,其中所述标识符的自身信息包括标识符的name以及uri。其中name表示对应函数或者变量的标识符的名称,uri表示标识符的来源。通过散列算法将任意长度的数据转换为固定长度的值。
[0071]
一个实施方式中,通过将name以及uri分别通过散列函数得到对应的散列值,之后通过两个散列值生成唯一的散列值。
[0072]
在本实施方式中,通过步骤s3001-s3003得到第一散列值,具体而言:
[0073]
步骤s3001:将标识符名称通过散列算法得到第二散列值。
[0074]
在本实施例中,标识符名称是指在抽象语法树中表示标识符字符的name,在本实施例中,散列算法即为哈希函数(hashfunction),第二散列值即为通过散列算法得到的哈希码(hashcord)。
[0075]
一个实施方式中,通过md4算法得到响应的第二散列值。例如,标识符的name为“bayes”,将其通过散列算法会得到其相应的第二散列值“ae6869a21e41996980f32745af3149c8”,但是不同库中的函数会有重名的可能,所以另一个库中为“bayes”的函数,通过散列算法后会得到相同的哈希码,即“ae6869a21e41996980f32745af3149c8”,所以仅仅通过标识符的name不能够得到一个唯一的标识符。
[0076]
步骤s3002:将标识符统一资源标识符通过散列算法得到第三散列值。
[0077]
在本实施例中,统一资源标识符即为抽象语法树中的标识符uri,在本实施例中,第三散列值即为通过散列算法得到的哈希码。
[0078]
一个实施方式中,uri为“../resource.txt”,通过md4计算之后得到其uri对应的第三散列值“44549ce0255f4113be29d113c6d39b38”。需要说明的是,name以及uri均为字符串,所以均能够进行哈希运算。一个uri对应的库中有很多个函数,即库中函数对应的uri均是相同的,但是其中每个函数的名字均是不同的,也就是在一个uri对应的库中每个函数的标识符的name均是不同的。需要说明的是,当标识符对应的是函数的时候,才会有对应的uri,如果标识符对应的是变量,则抽象语法树上就没有对应的uri,如果标识符没有对应的uri的情况下,就仅仅将标识符的name作为第一散列值。
[0079]
步骤s3003:基于第二散列值与第三散列值得到第一散列值。
[0080]
在本实施例中,第一散列值是通过第二散列值与第三散列值得到的,也就是说,第一散列值是基于标识符的name以及uri两个维度得到的,综合两个维度形成的第一散列值便不会出现重复的问题,有效降低了哈希冲突发生的概率。
[0081]
一个实施方式中,采用异或运算的计算方式融合,即将第二散列值与第三散列值进行异或运算得到第一散列值,具体而言是首先将第二散列值与第三散列值转化为二进制数字,之后再将对应的二进制数字进行异或运算即可。此处使用ascii码将散列值新型二进
global’,global为全局变量,有利于程序的变量共享,可以简化添加和修改的程序,其中双向链表中的value为全局作用域。在源码的处理时,即代码中函数语句执行时,在创建一个链表结点之后,会将函数标识符名称作为key值存入哈希表中。
[0100]
在函数调用语句执行时,首先在作用域中搜索其中的变量名,如若未搜索到则直接在全局作用域中搜索。在代码中函数语句执行完成后,会将其对应的链表结点进行删除,同时删除存储在哈希表中的函数作用域。
[0101]
在本实施例中,首先根据一种生成标识符的方法生成唯一的标识符名称,之后将对应的标识符名称作为key进行散列计算,得到对应的哈希值,通过哈希值在双向链表中增加新的链表节点,并且在双向链表中存储key与以及函数的value,并将函数的key存储在哈希表中。可以理解的是,在调用函数执行的时候,同样是需要函数对应的唯一的标识符。在本实施例中,此方法可将传统的作用域查询效率提升到最优(常数阶:o(1)),与存储的数据规模(n)无关。从而相对于堆栈的方式来说,降低了查询的时间复杂度。
[0102]
在本实施例中,给出一种运行时的作用域符号/变量查流程:
[0103]
1、test函数作用域中,存有标识符’c’;
[0104]
2、runtime在执行到a》b时,根据种类判断a、b是函数还是变量;
[0105]
3、发现是变量,则需要先从test函数作用域中根据id(标识符)查变量a、变量b;
[0106]
4、发现test函数作用域中没有到变量a、变量b,则会继续向上在全局作用域中查;
[0107]
5、在全局作用域中查到了变量a、变量b,读取其值;
[0108]
6、执行比较结果,发现a》b结果不成立;
[0109]
7、继续执行c=func()这条语句(fun表示子例程的一般性名词。在编程语言中,它指带返回值的子例程或语句或起着关键字的作用);
[0110]
8、根据种类判断func是函数还是变量;
[0111]
9、发现是函数,则在全局符号表中通过id查;
[0112]
10、查到后,执行并返回结果;
[0113]
其中示例代码示例如下:
[0114][0115]
实施例4
[0116]
本实施例提出一种生成唯一标识符的方法的系统,包括:生成模块、查模块、计算模块以及赋值模块,其中:
[0117]
生成模块:基于目标文件生成抽象语法树。
[0118]
在生成模块中,目标文件是语法文件,语法文件是指满足一定的词法规则与语法规则的文件。其中语法由一个为该语法命名的头部定义和一系列可以互相引用的语言规则组成,抽象语法树是对目标文件进行语法分析阶段的结果。
[0119]
查模块:获取抽象语法树中的所有标识符节点。
[0120]
在查模块中通过遍历抽象语法获取其中的所有标识符节点。其中抽象语法树获取所有的标识符name信息,之后通过编译获得标识符的uri信息。
[0121]
计算模块:基于所述标识符以及散列算法得到第一散列值;
[0122]
在计算模块中,所述基于所述标识符的自身信息以及散列算法得到第一散列值,包括,主计算模块:基于所述标识符的名称和相应的统一资源标识符以及散列算法得到第一散列值,其中所述标识符的自身信息包括标识符的name以及uri。其中name表示对应函数
或者变量的标识符的名称,uri表示标识符的来源。通过散列算法将任意长度的数据转换为固定长度的值。
[0123]
主计算模块包括第一计算模块、第二计算模块以及第三计算模块。
[0124]
第一计算模块:将标识符名称通过散列算法得到第二散列值。
[0125]
在第一计算模块中,标识符名称是指在抽象语法树中表示标识符字符的name,在本实施例中,散列算法即为哈希函数(hash function),第二散列值即为通过散列算法得到的哈希码(hashcord)。
[0126]
第二计算模块:将标识符统一资源标识符通过散列算法得到第三散列值。
[0127]
在第二计算模块中,统一资源标识符即为抽象语法树中的标识符uri,在本实施例中,第三散列值即为通过散列算法得到的哈希码。
[0128]
第三计算模块:基于第二散列值与第三散列值得到第一散列值。
[0129]
在第三计算模块中,第一散列值是通过第二散列值与第三散列值得到的,也就是说,第一散列值是基于标识符的name以及uri两个维度得到的,综合两个维度形成的第一散列值便不会出现重复的问题,有效降低了哈希冲突发生的概率。
[0130]
赋值模块:将所述标识符的名称改为所述第一散列值。
[0131]
在赋值模块中,此处标识符的名称即为抽象语法树中标识符的name。
[0132]
进一步的,此处给出另一种计算模块的内部计算模式,即用第一整合模块与第四计算模块替代第一计算模块、第二计算模块以及第三计算模块。
[0133]
第一整合模块:将标识符名称与标识符统一资源标识符进行整合形成第一字符串。
[0134]
在第一整合模块中,此处将标识符名称与统一资源标识符进行整合的意思是进行拼接,之后得到第一字符串。
[0135]
第四计算模块:将第一字符串通过散列算法得到第一散列值。
[0136]
在第四计算模块中,使用的散列算法以及具体原理在实施例1中均已经详述,实施例2中的散列算法与第一散列值与实施例1中一致,此处不再赘述。
[0137]
在本实施例中,此处将标识符名称与统一资源标识符进行整合的意思是进行拼接,之后得到第一字符串。
[0138]
本领域技术人员能够理解的是,本发明实现上述一实施例的方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读存储介质可以包括:能够携带所述计算机程序代码的任何实体或装置、介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器、随机存取存储器、电载波信号、电信信号以及软件分发介质等。需要说明的是,所述计算机可读存储介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读存储介质不包括电载波信号和电信信号。
[0139]
进一步,本发明还提供了一种电子装置。在根据本发明的一个电子装置实施例中,电子装置包括处理器和存储装置,存储装置可以被配置成存储执行上述方法实施例的一种
生成唯一标识符的方法的程序,处理器可以被配置成用于执行存储装置中的程序,该程序包括但不限于执行上述方法实施例的一种生成唯一标识符的方法的程序。为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该电子装置可以是包括各种电子设备形成的电子装置设备。
[0140]
进一步,本发明还提供了一种计算机可读存储介质。在根据本发明的一个计算机可读存储介质实施例中,计算机可读存储介质可以被配置成存储执行上述方法实施例的一种生成唯一标识符的方法的程序,该程序可以由处理器加载并运行以实现上述一种生成唯一标识符的方法。为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明实施例方法部分。该计算机可读存储介质可以是包括各种电子设备形成的存储装置设备,可选的,本发明实施例中计算机可读存储介质是非暂时性的计算机可读存储介质。
[0141]
进一步,应该理解的是,由于各个模块的设定仅仅是为了说明本发明的装置的功能单元,这些模块对应的物理器件可以是处理器本身,或者处理器中软件的一部分,硬件的一部分,或者软件和硬件结合的一部分。因此,图中的各个模块的数量仅仅是示意性的。
[0142]
本领域技术人员能够理解的是,可以对装置中的各个模块进行适应性地拆分或合并。对具体模块的这种拆分或合并并不会导致技术方案偏离本发明的原理,因此,拆分或合并之后的技术方案都将落入本发明的保护范围内。
[0143]
上述网络可以包括但不限于以下至少之一:有线网络,无线网络。上述有线网络可以包括但不限于以下至少之一:广域网,城域网,局域网,上述无线网络可以包括但不限于以下至少之一:wifi(wireless fidelity,无线保真),蓝牙。终端设备102可以并不限定于为pc、手机、平板电脑、智能空调、智能烟机、智能冰箱、智能烤箱、智能炉灶、智能洗衣机、智能热水器、智能洗涤设备、智能洗碗机、智能投影设备、智能电视、智能晾衣架、智能窗帘、智能影音、智能插座、智能音响、智能音箱、智能新风设备、智能厨卫设备、智能卫浴设备、智能扫地机器人、智能擦窗机器人、智能拖地机器人、智能空气净化设备、智能蒸箱、智能微波炉、智能厨宝、智能净化器、智能饮水机、智能门锁等。
[0144]
至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征作出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。

技术特征:


1.一种生成唯一标识符的方法,其特征在于,包括:基于目标文件生成抽象语法树;获取抽象语法树中的所有标识符;基于所述标识符的自身信息以及散列算法得到第一散列值;将所述标识符的名称改为所述第一散列值。2.根据权利要求1所述的生成唯一标识符的方法,其特征在于,所述标识符的自身信息包括标识符的名称以及相应的统一资源标识符;所述基于所述标识符的自身信息以及散列算法得到第一散列值,包括:基于所述标识符的名称和相应的统一资源标识符以及散列算法得到第一散列值。3.根据权利要求1所述的生成唯一标识符的方法,其特征在于,所述获取抽象语法树中的所有标识符包括:通过对抽象语法树进行深度遍历,出所有的标识符。4.根据权利要求2所述的生成唯一标识符的方法,其特征在于,所述基于所述标识符的名称和相应的统一资源标识符以及散列算法得到第一散列值,包括:将标识符名称通过散列算法得到第二散列值;将标识符统一资源标识符通过散列算法得到第三散列值;基于第二散列值与第三散列值得到第一散列值。5.根据权利要求2所述的生成唯一标识符的方法,其特征在于,所述基于所述标识符的名称和相应的统一资源标识符以及散列算法得到第一散列值,包括:将标识符名称与标识符统一资源标识符进行整合形成第一字符串;将第一字符串通过散列算法得到第一散列值。6.根据权利要求1所述的生成唯一标识符的方法,其特征在于,所述基于目标文件生成抽象语法树,包括:通过语法分析器从目标文件生成抽象语法树。7.一种运行时源码的处理方法,其特征在于,其方法包括:从可执行文件中提取函数信息,其中函数信息包括函数对应的标识符名称,所述标识符名称是基于根据权利要求1-6中任一项所述的方法所得到的标识符的名称;基于函数信息在双向链表中创建链表节点,其中所述双向链表的链表结点中存储key以及相对应的value,其中所述链表结点中存储的key是对应函数的标识符,其中各个所述链表结点之间均为双向连接;将key存储在哈希表中。8.一种生成唯一标识符的方法的系统,其特征在于,包括:生成模块:基于目标文件生成抽象语法树;查模块:获取抽象语法树中的所有标识符;计算模块:基于所述标识符以及散列算法得到第一散列值;赋值模块:将所述标识符的名称改为所述第一散列值。9.一种计算机可读的存储介质,其特征在于,所述计算机可读的存储介质包括存储的程序,其中,所述程序运行时执行权利要求1至6中任一项所述的生成唯一标识符的方法或权利要求7所述的运行时源码的处理方法。
10.一种电子装置,包括存储器和处理器,其特征在于,所述存储器中存储有计算机程序,所述处理器被设置为通过所述计算机程序执行权利要求1至6中任一项所述的生成唯一标识符的方法或权利要求7所述的运行时源码的处理方法。

技术总结


本申请公开了一种生成唯一标识符的方法、系统及电子装置,涉及智能家居/智慧家庭技术领域,其中一种生成唯一标识符的方法,包括:基于目标文件生成抽象语法树;获取抽象语法树中的所有标识符节点;基于所述标识符的自身信息以及散列算法得到第一散列值;将所述标识符的名称改为所述第一散列值。通过抽象语法树遍历所有标识符,之后通过标识符的自身信息以及散列算法得到融合标识符多种信息的第一散列值,避免了标识符重复的问题。规范了相关的标识符名称,使之后再进行散列计算的时候不会引起哈希冲突,减少了出现意外的风险,提高了系统的稳定性。稳定性。稳定性。


技术研发人员:

刘桐

受保护的技术使用者:

青岛海尔科技有限公司 海尔智家股份有限公司

技术研发日:

2022.09.06

技术公布日:

2022/12/16

本文发布于:2024-09-25 16:29:42,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/35531.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:标识符   所述   语法   函数
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议